Heim > Backend-Entwicklung > Python-Tutorial > Python编程中的文件读写及相关的文件对象方法讲解

Python编程中的文件读写及相关的文件对象方法讲解

WBOY
Freigeben: 2016-06-10 15:06:40
Original
1174 Leute haben es durchsucht

python文件读写

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

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

mode:

模式    说明

r        只读

r+      读写

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

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

读文件:

>>> fo = open("/root/a.txt")
>>> fo
Nach dem Login kopieren

<open file '/root/a.txt', mode 'r' at 0x7f5095dec4e0>
Nach dem Login kopieren

>>> fo.read()
Nach dem Login kopieren

'hello davehe\ni am emily\nemily emily\n'
Nach dem Login kopieren
Nach dem Login kopieren

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

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file
Nach dem Login kopieren


>>> f1 = file("/root/a.txt")         
>>> f1.read()
Nach dem Login kopieren

'hello davehe\ni am emily\nemily emily\n'
Nach dem Login kopieren
Nach dem Login kopieren

>>> f1.close()
Nach dem Login kopieren

写文件:

root@10.1.6.200:~# ls -l new.txt
Nach dem Login kopieren

ls: cannot access new.txt: No such file or directory
Nach dem Login kopieren

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

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

root@10.1.6.200:~# cat new.txt 
root@10.1.6.200:~#
Nach dem Login kopieren
Nach dem Login kopieren

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

>>> fnew.close()
root@10.1.6.200:~# cat new.txt 
Nach dem Login kopieren

hello 
i am dave
Nach dem Login kopieren

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

>>> fnew = open("/root/new.txt","w")
Nach dem Login kopieren

root@10.1.6.200:~# cat new.txt 
root@10.1.6.200:~#
Nach dem Login kopieren
Nach dem Login kopieren

mode使用r+参数:

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

'hello dave'
Nach dem Login kopieren

>>> fnew.write('i am dave')
>>> fnew.close()
Nach dem Login kopieren

root@10.1.6.200:~# cat new.txt 
Nach dem Login kopieren
Nach dem Login kopieren

hello davei am dave
Nach dem Login kopieren

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

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

root@10.1.6.200:~# cat new.txt 
Nach dem Login kopieren
Nach dem Login kopieren

ooolo davei am dave

Nach dem Login kopieren

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

  • 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
... 
Nach dem Login kopieren

hello davehe
i am emily
emily emily

Nach dem Login kopieren

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

>>> f1 = open("/root/a.txt")
>>> f1.readline()
Nach dem Login kopieren

'hello davehe\n'
Nach dem Login kopieren
Nach dem Login kopieren

>>> f1.readline()
Nach dem Login kopieren
Nach dem Login kopieren

'i am emily\n'
Nach dem Login kopieren
Nach dem Login kopieren

>>> f1.readline()
Nach dem Login kopieren
Nach dem Login kopieren

'emily emily\n'
Nach dem Login kopieren
Nach dem Login kopieren

>>> f1.readline()
''
>>> f1.readline()
''
>>>f1.close()
Nach dem Login kopieren

FileObject.readlines:返回一个列表

>>> f1 = open("/root/a.txt")
>>> f1.readlines()
Nach dem Login kopieren

['hello davehe\n', 'i am emily\n', 'emily emily\n']''
Nach dem Login kopieren

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

>>> f1 = open("/root/a.txt")
>>> f1.next()
Nach dem Login kopieren

'hello davehe\n'
Nach dem Login kopieren
Nach dem Login kopieren

>>> f1.next()
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

'i am emily\n'
Nach dem Login kopieren
Nach dem Login kopieren

>>> f1.next()
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

'emily emily\n'
Nach dem Login kopieren
Nach dem Login kopieren

>>> f1.next()
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
StopIteration
Nach dem Login kopieren

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

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

>>> l = ["python\n","python\n","python\n"]
>>> f1 = open('/root/a.txt','a')
>>> f1.writelines(l)
>>> f1.close()
Nach dem Login kopieren

root@10.1.6.200:~# cat a.txt 
Nach dem Login kopieren
Nach dem Login kopieren

hello davehe
i am emily
emily emily
python
python
python
Nach dem Login kopieren

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

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

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

'hello davehe\ni am emily\nemily emily\npython\npython\npython\n'
Nach dem Login kopieren
Nach dem Login kopieren

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

'hello davehe\ni am emily\nemily emily\npython\npython\npython\n'
Nach dem Login kopieren
Nach dem Login kopieren

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

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

root@10.1.6.200:~# vim file.py 
Nach dem Login kopieren

#!/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()
Nach dem Login kopieren

root@10.1.6.200:~# cat a.txt 
Nach dem Login kopieren
Nach dem Login kopieren

hello davehe
i am emily
emily emily
Nach dem Login kopieren

root@10.1.6.200:~# python file.py 
Nach dem Login kopieren

this is have 3 emily

Nach dem Login kopieren

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage