zoukankan      html  css  js  c++  java
  • python IO文件处理

    python的文件读写操作符有:
    r

    w

    a

    r+

    w+

    rb

    wb

    除了以file的方式打开文件,还有一种方式就是open了,两个的用法是一模一样的,可以看成open就是file的别名

    下面这个表格是转自:http://blog.csdn.net/cnmilan/article/details/9142561

    w

    以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容

    a

    以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建,可以追加文件内容,但是只可以写,不可以读

    r+

    以读写方式打开文件,可对文件进行读和写操作。下次再执行r+的时候,文件会从指针0位置开始写,写操作是默认从0位置开始写的。要是想从文件末尾追加可以使用a

    w+

    消除文件内容,然后以读写方式打开文件。

    a+

    以读写方式打开文件,并把文件指针移到文件尾。(要是文件不存在,就创建这个文件),可读可写

    b

    以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

    操作文件对象方法

    f.close()

    关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。

    f.fileno()

    获得文件描述符,是一个数字

    f.flush()

    刷新输出缓存

    f.isatty()

    如果文件是一个交互终端,则返回True,否则返回False。

    f.read([count])

    读出文件,如果有count,则读出count个字节。一下把整个文件的读出来,整个文件以字符串的形式显示出来,当我们执行完f.read()之后再执行f.read()会发现没有内容展现出来,那是因为我们读取文件之后,文件指针跑到末尾了,要是想重新能够读取内容,可以执行f.seek(0),把文件指针放到起始位置

    f.readline()

    读出一行信息。(文件内容一行一行显示出来)

    f.readlines()

    读出所有行,也就是读出整个文件的信息(先把文件读到内存里,所有内容以一个列表的形式展示出来)

    f.seek(offset[,where])

    把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。

    f.tell()

    获得文件指针位置

    f.truncate([size])

    截取文件,使文件的大小为size。

    f.write(string)

    把string字符串写入文件。

    f.writelines(list)

    把list中的字符串一行一行地写入文件,是连续写入文件,没有换行(以列表的性形式写进去内容)


    还有一个f.xreadlines()   相当于迭代器,循环一次读一行内容,一行一行的往内存里面读,读完一行之后扔一行,然后读取下一行,非常省内存

    现在看一下下面几个循环

    >>> for line in f.readlines():
    ...     print line,
    ...
    ppppp
    haha
    gogogo
    kkkkkkkkkkkkbbbb
    aaaa

    >>> f.close()
    >>> f = file('test.txt','r')
    >>> for line in f.readlines():
    ...     print line
    ...
    ppppp

    haha

    gogogo

    kkkkkkkkkkkkbbbb

    aaaa
    我们可以看到上面在执行print的时候两者的区别是,要是没有加逗号","的话,文件输出的时候会换行所以为了好看我们在print的时候加上一个逗号”,“

    >>> f = file('test.txt','r')
    >>> for line in f.readline():
    ...     print line,
    ...
    p p p p p  

    我们在看一下f.xreadlines()

    >>> f.close()
    >>> f = file('test.txt','r')
    >>> for line in f.xreadlines():
    ...     print line,
    ...
    ppppp
    haha
    gogogo
    kkkkkkkkkkkkbbbb
    aaaa

    我们肉眼看到好像f.readline 和f.xreadlines没有什么区别,但是当我们循环一个大文件的时候我们就会看到xreadlines()的性能会比readline好很多

    还有一种循环就是

    >>> f.close()
    >>> f = file('test.txt','r')
    >>> while True:
    ...     line = f.readline()
    ...     print line,
    ...     if not line:break
    ...
    ppppp
    haha
    gogogo
    kkkkkkkkkkkkbbbb
    aaaa

    这个性能更低,没读取一次的时候就要执行一个判断语句

    例1:从文本文件中每读取一行文本便输出

    我们现在来看一下下面的实例:

    [root@git 628]# pwd
    /root/python/python_day_practice/628

    >>> f = file('test.txt','w')
    >>> f.write('this is a good day!')

    在终端输入上面代码,这种情况下,我们到628目录下看看有没有我们写的这个文件test.txt,我们发现是有的,但是文件里面没有内容。原因是我们写完之后没有保存,文件内容还在内存中,没写到硬盘上

    这时候我们执行

    >>> f.close()

    我们就能看到文件test.txt文件下有内容了

    我们要是想读取文件的不同行的内容的操作方法有

    >>> f = file('test.txt','r')
    >>> b = f.readlines()
    >>> b[1]
    'haha '
    >>> b[2]
    'gogogo '
    >>>

    还有一种方法就是先读取全部的内容,然后以       这个字符为准,然后切片

    >>> f = file('test.txt','r')
    >>> c = f.readline()
    >>> c.split(' ')[0]
    'ppppp '

    文件内容的替换()

    下面还要说一种python 中的fileinput模块

    >>> import fileinput(要是批量修改文件的话可以使用这个方法)

    >>> for line in fileinput.input('test.txt',inplace=1):
    ...   line = line.replace('go','break')
    ...   print line,
    ...

    把文件中的"go"换成”break“,注意这里要print 一下,不然文件中的内容不发生变化
    >>> for line in fileinput.input('test.txt',inplace=1,backup='.bak'):
    ...   line = line.replace('back','go')
    ...   print line,
    ...

    这里加了一个backup的意思就是说把原有的文件给备份一下,防止出错

    假如说我们用file 或者 open的方式打开文件或者写入内容的时候。我们需要执行。f.close()关闭文件,把内容从内存中释放的硬盘中

    但是现在有一种方法不需要执行f.close(),那就是with  ......   as

    python 中with的作用就是自动的释放对象,

    >>> with open('test7.txt','r') as f:
    ...     for i in f.xreadlines():
    ...         print i
    ...
    123

    345

    456

    677

    577

    还有一点要注意的是,我们网文件里面写内容的时候,要注意我们只能写字符串类型的,所以这里要注意了,当我们想向文件里面写数字是不行的,这里我们就得转换一下字符类型

    我们可以使用str 或者是  join的方式转换,具体实例参照如下:

    >>> a = 4
    >>> type(a)
    <type 'int'>
    >>> type(str(a))
    <type 'str'>

    现在我们来说一下,join和split的用法

    join是用来连接字符串的,刚好split的用法刚好相反,他是用来拆分字符串的

    >>> a = ['1','2','3']
    >>> a[1]
    '2'
    >>> type(a[1])
    <type 'str'>
    >>> ''.join(a)
    '123'
    >>> '*'.join(a)
    '1*2*3'
    >>>

    现在我们来看一下split的用法

    >>> b = 'my**name**is**haha'

    >>> b.split("**",1)
    ['my', 'name**is**haha']
    >>> b.split("**",4)
    ['my', 'name', 'is', 'haha']
    >>> b.split("**")
    ['my', 'name', 'is', 'haha']
    >>> b.split("**",2)
    ['my', 'name', 'is**haha']

  • 相关阅读:
    古谚、评论与论断、名篇与名言
    重读《西游记》
    重读《西游记》
    命名之法 —— 时间、季节、地点
    命名之法 —— 时间、季节、地点
    文言的理解 —— 古时的称谓、别称、别名
    文言的理解 —— 古时的称谓、别称、别名
    Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration
    瀑布 敏捷 文档
    POJ 1325 ZOJ 1364 最小覆盖点集
  • 原文地址:https://www.cnblogs.com/smail-bao/p/5622691.html
Copyright © 2011-2022 走看看