25. 读写文件

1、读文件

  1. 以读文件的模式打开一个文件对象,使用python内置的open()函数
>>> f = open('/Users/michael/test.txt', 'r')
  1. 如果文件不存在,open()函数就会抛出一个IOError的错误,并给出错误码和详细的信息
>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
	File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
  1. 如果文件打开成功,调用read()方法一次读取文件的全部内容
>>> f.read()
'Hello, world!'
  1. 最后调用close()方法关闭文件。
>>> f.close()
  1. 由于文件读写时都可能产生IOError,一旦出错,f.close()就不会调用。所以,为了保证无论文件是否出错都能正确关闭文件,我们使用try ... finally来实现:
try:
	f = open('/path/to/file', 'r' )
	print(f.read())
finally:
    if f:
        f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:
	print(f.read())

这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

  1. 如果文件很小,read()一次性读取方便,则反复调用read(size)保险,如果时配置文件,调用readlines()最方便:
for line in f.readlines():
	print(line.strip()) # 把末尾的'\n'删掉

字符编码

​ 要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数;

例如,读取GBK编码的文件:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
>>> f.read()
'测试'

​ 遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

2、写文件

​ 写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符‘w'或者‘wb’表示写文本文件或写二进制文件:

>>> f = open('/Users/michael/test.txt', 'w')
>>> f.write('Hello, world!')
>>> f.close()

​ 务必调用f.close()来关闭文件,当写入文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存中,空闲时再慢慢写入。

​ 忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

with open('/Users/michael/test.txt', 'w') as f:
	f.write('Hello, world!')
posted @ 2020-08-28 15:42  马里奥本奥  阅读(115)  评论(0编辑  收藏  举报