文件数据读写读写文件,本质上是请求操作系统打开一个文件对象,然后通过操作系统提供的接口从文件对象中读取数据(读取文件),或者把数据写入这个文件对象(writefile)。文件读取使用Python内置的open()函数以rt方式读取文件,如下例所示:>>>f=open('some.txt','rt')这行代码的意思是打开一个file,如果是文件不存在,会抛出IOError异常,并给出详细的信息提示:>>>f=open('undefined.txt','rt')Traceback(最近的calllast):File"",line1,inFileNotFoundError:[Errno2]Nosuchfileordirectory:'undefined.txt'成功打开文件后,可以使用read()函数读取文件的内容:>>>f.read()'Helloworld!'当读取数据时,需要调用close()关闭文件。因为文件对象会占用资源,使用后需要及时关闭,释放资源。>>>f.close()另一种方法是使用with语句为所使用的文件创建一个上下文,这样就可以自动关闭文件对象。>>>withopen('some.txt','rt')asf:...data=f.read()...调用read()时一次读取所有内容。如果文件内容太大,可以使用read(size)固定大小循环读取,每次最多读取size个字节。readline()函数一次读取一行,readlines()读取所有内容,但逐行返回一个列表。三者的使用可根据实际需要选择。二进制文件读取二进制文件需要使用rb模式打开:>>>f=open('image.jpg','rb')>>>f.read()b'\xff\xd8\xff\xe0\x00\x10JFIF\x00...'从文件中读取数据,需要注意编码问题。当编码错误时,会抛出UnicodeDecodeError异常。例如:>>>f=open('some.txt','rt',encoding='ascii')>>>f.read()Traceback(mostrecentcalllast):File"",line1,在文件“/usr/local/lib/python3.6/encodings/ascii.py”,第26行,在decodereturncodecs.ascii_decode(input,self.errors)[0]UnicodeDecodeError:'ascii'codeccan'tdecodebyte0xccinposition2:ordinalnotinrange(128)这种情况一般是读取文本指定的编码不正确,需要确认文件的编码是否正确。如果编码错误仍然存??在,可以将一个可选的错误参数传递给open()函数来处理它们。例如:>>>f=open('some.txt','rt',encoding='ascii',errors='replace')>>>f.read()'Un??ic??o??de??'>>>f=open('some.txt','rt',encoding='ascii',errors='ignore')>>>f.read()'Unicode'使用参数errors来处理encodingerrors问题,但是过程会感觉很糟糕。这里提倡的是确保您使用的是正确的编码。当不明确时,使用默认设置(通常是UTF-8)。压缩文件gzip和bz2模块可用于读取gzip和bz2格式的压缩文件。这两个模块都为open()提供了额外的实现,以解决读取gzip和bz2格式的压缩文件的问题。例如读取压缩文件,例子如下:>>>importgzip>>>withgzip.open('some.gz','rt')asf:...text=f.read()>>>importbz2>>>withbz2.open('some.bz2','rt')asf:...text=f.read()文件写入文件写入,同样需要调用open()参数,但是指定的mode是wt或者wb,用于写入文本文件或者二进制文件:>>>f=open('some.txt','wt')>>>f.write('Hello,world!')13>>>f.close()数据写入后,还需要调用close()关闭文件对象。您还可以使用with语句创建上下文以正常关闭文件对象。同样,写入压缩数据时,导入gzip或bz2模块:>>>importgzip>>>withgzip.open('some.gz','wt')asf:...f.write(text)>>>importbz2>>>withbz2.open('some.bz2','wt')asf:...f.write(text)在写入压缩数据时,可选参数compresslevel可以指定一个压缩级别。例如:>>>withgzip.open('some.gz','wt',compresslevel=6)asf:...f.write(text)compresslevel参数的默认值为9,表示最高压缩级别。较低的级别提供更好的性能,但压缩率也较低。在w模式下使用open()函数,如果打开的文件在写入前有数据内容,则清除并覆盖。如果要向现有文件添加内容,请使用模式为的open()函数。涉及读写文件模式的定义和含义,内容如下:mode含义'r'读取数据(默认)'w'写入数据'x'如果文件存在则抛出异常,如果不存在则抛出异常,create'a'toappendwritedata'b'binarymode''textmode(default)'+'updatefile(readingandwriting)更多详细内容请参考Python官方文档。参考资料来源DavidM.Beazley;布赖恩·琼斯。PythonCookbook,第3版。奥莱利媒体。2013.卢西亚诺·拉马略。流利的Python。奥莱利媒体。2015."2.内置函数".docs.python.org.2020年1月20日检索。"gzip—支持gzip文件"。docs.python.org.2020年1月22日检索。"bz2—支持bzip2压缩".docs.python.org.2020年1月22日检索。Xuefeng廖.《Python教程》.liaoxuefeng.com.[2020-01-18].以上是本文的主要内容。欢迎关注微信公众号《书所集录》