6.4 文件和文件对象
文件可以看作是数据的集合,一般保存在磁盘或其他存储介质上。
6.4.1 文件对象和open()函数
内置函数open()用于打开或创建文件对象,其语法格式如下。
其中,file是要打开或创建的文件名,如果文件不在当前路径,需指出具体路径;mode是打开文件的模式;buffering表示是否使用缓存(默认为-1,表示使用系统默认的缓冲区大小);encoding是文件的编码。open()函数返回一个文件对象f。
在使用open()函数时可以指定打开文件的模式为'r'(只读)、'w'(写入,写入前删除旧内容)、'x'(创建新文件,如果文件存在,则导致FileExistsError)、'a'(追加)、'b'(二进制文件)、't'(文本文件,默认值)、'+'(更新,读写)。
open()函数默认打开模式为'rt',即文本读取模式。
文件操作容易产生异常,而且最后需要关闭打开的文件,故一般使用try…except…finally语句,在try语句块中执行文件的相关操作,使用except捕获可能发生的异常,在finally语句块中确保关闭打开的文件。
6.4.2 文件的打开、写入、读取和关闭
通过内置函数open()可以创建或打开文件对象;通过文件对象的实例方法write/writelines可以写入字符串到文本文件;通过文件对象的实例方法read/readline可以读取文本文件的内容;文件读写完成后,应该使用close方法关闭文件。
文本文件对象是可迭代对象,也可以使用for循环语句遍历所有的行。
【例6.8】 读取并输出文本文件(type_file.py)。
程序运行结果如图6-6所示。
图6-6 读取并输出文本文件
6.4.3 with语句和上下文管理协议
使用try...except...finally语句可以确保在try语句块中获得的资源(例如打开的文件)在finally语句块中释放。
为了简化操作,Python语言中与资源相关的对象可以实现上下文管理协议。实现上下文管理协议的对象可以使用with语句:
with语句定义了一个上下文。在执行with语句时,首先调用上下文对象context的__enter__(),其返回值赋给var;离开with语句块时,最后调用context的__exit__(),确保释放资源。
文件对象支持使用with语句,确保打开的文件自动关闭:
【例6.9】 利用with语句读取并输出文本文件(type_file_with.py)。