1.open
利用open打开文件后必然要记得挪用文件工具的close()要领。好比可以用try/finally语句来确保最后能封锁文件。
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
注:不能把open语句放在try块里,因为当打开文件呈现异常时,文件工具file_object无法执行close()要领。
2.读文件
读文本文件
input = open('data', 'r')
#第二个参数默认为r
input = open('data')
读二进制文件
input = open('data', 'rb')
读取所有内容
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
读牢靠字节
file_object = open('abinfile', 'rb')
try:
while True:
chunk = file_object.read(100)
if not chunk:
break
do_something_with(chunk)
finally:
file_object.close( )
读每行
list_of_all_the_lines = file_object.readlines( )
假如文件是文本文件,还可以直接遍历文件工具获取每行:
for line in file_object:
process line
3.写文件
写文本文件
output = open('data', 'w')
写二进制文件
output = open('data', 'wb')
追加写文件
output = open('data', 'w+')
写数据
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )
写入多行
file_object.writelines(list_of_text_strings)
留意,挪用writelines写入多行在机能上会比利用write一次性写入要高。
在处理惩罚日志文件的时候,经常会碰着这样的环境:日志文件庞大,不行能一次性把整个文件读入到内存中举办处理惩罚,譬喻需要在一台物理内存为 2GB 的呆板上处理惩罚一个 2GB 的日志文件,我们大概但愿每次只处理惩罚个中 200MB 的内容。
在 Python 中,内置的 File 工具直接提供了一个 readlines(sizehint) 函数来完成这样的工作。以下面的代码为例:
file = open('test.log', 'r')sizehint = 209715200 # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() – position < 0: position = file.tell() lines = file.readlines(sizehint)
每次挪用 readlines(sizehint) 函数,会返回约莫 200MB 的数据,并且所返回的一定都是完整的行数据,大大都环境下,返回的数据的字节数会稍微比 sizehint 指定的值大一点(除最后一次挪用 readlines(sizehint) 函数的时候)。凡是环境下,Python 会自动将用户指定的 sizehint 的值调解成内部缓存巨细的整数倍。
file在python是一个非凡的范例,它用于在python措施中对外部的文件举办操纵。在python中一切都是工具,file也不破例,file有file的要领和属性。下面先来看如何建设一个file工具:
file(name[, mode[, buffering]])
file()函数用于建设一个file工具,它有一个体名叫open(),大概更形象一些,它们是内置函数。来看看它的参数。它参数都是以字符串的形式通报的。name是文件的名字。
mode是打开的模式,可选的值为r w a U,别离代表读(默认) 写 添加支持各类换行符的模式。用w或a模式打开文件的话,假如文件不存在,那么就自动建设。另外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空,因为一开始文件的操纵的标志是在文件的开头的,这时候举办写操纵,无疑会把原有的内容给抹掉。由于汗青的原因,换行符在差异的系统中有差异模式,好比在 unix中是一个\n,而在windows中是‘\r\n’,用U模式打开文件,就是支持所有的换行模式,也就说‘\r’ '\n' '\r\n'都可暗示换行,会有一个tuple用来存贮这个文件顶用到过的换行符。不外,虽说换行有多种模式,读到python中统一用\n取代。在模式字符的后头,还可以加上+ b t这两种标识,别离暗示可以对文件同时举办读写操纵和用二进制模式、文本模式(默认)打开文件。
buffering假如为0暗示不举办缓冲;假如为1暗示举办“行缓冲“;假如是一个大于1的数暗示缓冲区的巨细,应该是以字节为单元的。
file工具有本身的属性和要领。先来看看file的属性。
closed #标志文件是否已经封锁,由close()改写
encoding #文件编码
mode #打开模式
name #文件名
newlines #文件顶用到的换行模式,是一个tuple
softspace #boolean型,一般为0,听说用于print
file的读写要领:
F.read([size]) #size为读取的长度,以byte为单元
F.readline([size])
#读一行,假如界说了size,有大概返回的只是一行的一部门
F.readlines([size])
#p#分页标题#e#
#把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过轮回挪用readline()来实现的。假如提供size参数,size是暗示读取内容的总长,也就是说大概只读到文件的一部门。
F.write(str)
#把str写到文件中,write()并不会在str后加上一个换行符
F.writelines(seq)
#把seq的内容全部写到文件中。这个函数也只是忠实地写入,不会在每行后头加上任何对象。
file的其他要领:
F.close()
#封锁文件。python会在一个文件不消后自动封锁文件,不外这一成果没有担保,最好照旧养本钱身封锁的习惯。假如一个文件在封锁后还对其举办操纵会发生ValueError
F.flush()
#把缓冲区的内容写入硬盘
F.fileno()
#返回一个长整型的”文件标签“
F.isatty()
#文件是否是一个终端设备文件(unix系统中的)
F.tell()
#返回文件操纵标志的当前位置,以文件的开头为原点
F.next()
#返回下一行,并将文件操纵标志位移到下一行。把一个file用于for … in file这样的语句时,就是挪用next()函数来实现遍历的。
F.seek(offset[,whence])
#将文件打操纵标志移到offset的位置。这个offset一般是相对付文件的开头来计较的,一般为正数。但假如提供了whence参数就不必然了,whence可觉得0暗示从新开始计较,1暗示以当前位置为原点计较。2暗示以文件末端为原点举办计较。需要留意,假如文件以a或a+的模式打开,每次举办写操纵时,文件操纵标志会自动返回到文件末端。
F.truncate([size])
#把文件裁陈划定的巨细,默认的是裁到当前文件操纵标志的位置。假如size比文件的巨细还要大,依据系统的差异大概是不改变文件,也大概是用0把文件补到相应的巨细,也大概是以一些随机的内容加上去。