视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python编程中的文件读写及相关的文件对象方法讲解
2020-11-27 14:35:09 责编:小采
文档


python文件读写

python 进行文件读写的内建函数是open或file

file_hander(文件句柄或者叫做对象)= open(filename,mode)

mode:

模式 说明

r 只读

r+ 读写

w 写入,先删除源文件,在重新写入,如果文件没有则创建

w+ 读写,先删除源文件,在重新写入,如果文件没有则创建(可以写入写出)

读文件:

>>> fo = open("/root/a.txt")
>>> fo


>>> fo.read()

'hello davehe
i am emily
emily emily
'

>>> fo.close()
>>> fo.read() #对象已关闭,在读取就读不到

Traceback (most recent call last):
 File "", line 1, in 
ValueError: I/O operation on closed file


>>> f1 = file("/root/a.txt") 
>>> f1.read()

'hello davehe
i am emily
emily emily
'

>>> f1.close()

写文件:

root@10.1.6.200:~# ls -l new.txt

ls: cannot access new.txt: No such file or directory

>>> fnew = open("/root/new.txt",'w') w参数文件没有则创建
>>> fnew.write('hello 
 i am dave')

这时查看文件数据其实还只是在缓存区中,没有真正落到文件上.

root@10.1.6.200:~# cat new.txt 
root@10.1.6.200:~#

只要我把文件关闭,数据会从缓存区写到文件里

>>> fnew.close()
root@10.1.6.200:~# cat new.txt 

hello 
i am dave

再次使用w参数,文件会被清空,所以用该参数需要谨慎.

>>> fnew = open("/root/new.txt","w")

root@10.1.6.200:~# cat new.txt 
root@10.1.6.200:~#

mode使用r+参数:

>>> fnew = open("/root/new.txt",'r+')
>>> fnew.read()

'hello dave'

>>> fnew.write('i am dave')
>>> fnew.close()

root@10.1.6.200:~# cat new.txt 

hello davei am dave

这次打开文件,直接写入,会发现ooo替换开头字母,因为上面读取操作使用了指针在写就写在后面.而这次是直接从头写入.

>>> fnew = open("/root/new.txt",'r+')
>>> fnew.write('ooo')
>>> fnew.close()

root@10.1.6.200:~# cat new.txt 

ooolo davei am dave

文件对象方法
下面文件对象方法

  • FileObject.close()
  • String=FileObject.readline([size])
  • List = FileObject.readlines([size])
  • String = FileObject.read([size]) read:读取所有数据
  • FileObject.next()
  • FileObject.write(string)
  • FileObject.writelines(List)
  • FlieObject.seek(偏移量,选项)
  • FlieObject.flush() 提交更新
  • >>> for i in open("/root/a.txt"): 用open可以返回迭代类型的变量,可以逐行读取数据
    ... print i
    ... 
    

    hello davehe
    i am emily
    emily emily
    
    

    FileObject.readline: 每次读取文件的一行,size是指每行每次读取size个字节,直到行的末尾,超出范围会读取空字符串

    >>> f1 = open("/root/a.txt")
    >>> f1.readline()
    

    'hello davehe
    '
    

    >>> f1.readline()
    

    'i am emily
    '
    

    >>> f1.readline()
    

    'emily emily
    '
    

    >>> f1.readline()
    ''
    >>> f1.readline()
    ''
    >>>f1.close()
    

    FileObject.readlines:返回一个列表

    >>> f1 = open("/root/a.txt")
    >>> f1.readlines()
    

    ['hello davehe
    ', 'i am emily
    ', 'emily emily
    ']''
    

    FileObject.next:返回当前行,并将文件指针到下一行,超出范围会给予警示,停止迭代.

    >>> f1 = open("/root/a.txt")
    >>> f1.next()
    

    'hello davehe
    '
    

    >>> f1.next()
    

    'i am emily
    '
    

    >>> f1.next()
    

    'emily emily
    '
    

    >>> f1.next()
    

    Traceback (most recent call last):
     File "", line 1, in 
    StopIteration
    

    FileObject.write:write和后面writelines在写入前会是否清除文件中原来所有的数据,在重新写入新的内容,取决于打开文件的模式.

    FileObject.writelines(List):多行写,效率比write高,速度更快,少量写入可以使用write

    >>> l = ["python
    ","python
    ","python
    "]
    >>> f1 = open('/root/a.txt','a')
    >>> f1.writelines(l)
    >>> f1.close()
    

    root@10.1.6.200:~# cat a.txt 
    

    hello davehe
    i am emily
    emily emily
    python
    python
    python
    

    FlieObject.seek(偏移量,选项):可以在文件中移动文件指针到不同的位置.

    位置的默认值为0,代表从文件开头算起(即绝对偏移量),1代表从当前位置算起,2代表从文件末尾算起.

    >>> f1 = open('/root/a.txt','r+')
    >>> f1.read()
    

    'hello davehe
    i am emily
    emily emily
    python
    python
    python
    '
    

    >>> f1.seek(0,0) 指针指到开头,在读
    >>> f1.read()
    

    'hello davehe
    i am emily
    emily emily
    python
    python
    python
    '
    

    >>> f1.read()
    ''
    >>> f1.seek(0,0)
    >>> f1.seek(0,2) 指针指到末尾,在读
    >>> f1.read()
    ''
    

    下面看个小实例,查找a.txt中emily出现几次

    root@10.1.6.200:~# vim file.py 
    

    #!/usr/bin/env python
    import re
    f1 = open('/root/a.txt')
    count = 0
    for s in f1.readlines():
     li = re.findall("emily",s)
     if len(li) > 0:
     count = count + len(li)
    print "this is have %d emily" % count 
    f1.close()
    

    root@10.1.6.200:~# cat a.txt 
    

    hello davehe
    i am emily
    emily emily
    

    root@10.1.6.200:~# python file.py 
    

    this is have 3 emily
    
    

    下载本文
    显示全文
    专题