当前位置:天才代写 > tutorial > Python教程 > 详解python文件读写操纵

详解python文件读写操纵

2017-11-02 08:00 星期四 所属: Python教程 浏览:751

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把文件补到相应的巨细,也大概是以一些随机的内容加上去。

 

    关键字:

天才代写-代写联系方式