通过程序操作文件与手动操作文件类似,通常需要经过三个步骤:打开文件、读或写数据、关闭文件。
打开文件
对文件所有的操作都是在打开文件之后进行的,打开文件使用open()函数来实现,其语法格式如下:
open(file[, mode = 'r' [,...]])
该函数返回一个文件对象,通过它可以对文件进行各种操作,另外参数列表中参数的说明如下表所示。
参数
|
说明
|
file
|
被打开的文件名
|
mode
|
文件打开模式,默认是只读模式
|
例如打开文件名为test.txt文件,具体示例如下:
f1 = open('test.txt') # 打开当前目录下的test.txt文件
f2 = open('../test.txt') # 打开上级目录下的test.txt文件
f3 = open('E:/study/随笔/test.txt') # 打开E:/study/随笔目录下的test.txt文件
示例中使用open()函数打开文件时使用只读模式打开,此时必须保证文件是存在的,否则会报文件不存在的错误。
Python中打开文件的模式有多种,具体如下表所示。
mode
|
读
|
写
|
追加
|
读/写格式
|
删除原内容
|
文件不存在
|
文件指针初始位置
|
'r'
|
√
|
|
|
文本
|
|
产生异常
|
文件开头
|
'r+'
|
√
|
√
|
|
文本
|
|
产生异常
|
文件开头
|
'rb+'
|
√
|
√
|
|
二进制
|
|
产生异常
|
文件开头
|
'w '
|
|
√
|
|
文本
|
√
|
新建文件
|
文件开头
|
'w+'
|
√
|
√
|
|
文本
|
√
|
新建文件
|
文件开头
|
'wb+'
|
√
|
√
|
|
二进制
|
√
|
新建文件
|
文件开头
|
'a'
|
|
|
√
|
文本
|
|
新建文件
|
文件末尾
|
'a+'
|
√
|
√
|
√
|
文本
|
|
新建文件
|
文件末尾
|
'ab+'
|
√
|
√
|
√
|
二进制
|
|
新建文件
|
文件末尾
|
在上表中,
r
表示从文件中读取数据,
w
表示往文件中写入数据,
a
表示往文件中追加数据,
+
可以与以上三种模式(
r
、
w
、
a
)配合使用,表示同时允许读和写。另外,当需要处理二进制文件时,则需要提供
b
给mode参数,例如
rb
用于读取二进制文件。
关闭文件
当对文件内容操作完以后,一定要关闭文件,这样才能保证所修改的数据保存到文件中,同时也可以释放内存资源供其他程序使用。关闭文件的语法格式如下:
文件对象名.close()
接下来演示文件的打开与关闭,如下所示。
1 f = open('test.txt', 'a+') # 以追加模式读写test.txt
2 f.close() # 关闭文件
运行结果如下图所示。
在上例中,通过open()函数打开文件test.txt,此时返回一个文件对象并赋值给f,最后通过文件对象调用close()方法关闭文件。
此处需注意,即使使用了close()方法,也无法保证文件一定能够正常关闭。例如,在打开文件之后和关闭文件之前发生了错误导致程序崩溃,这时文件就无法正常关闭。因此,在管理文件对象时推荐使用with关键字,可以有效地避免这个问题,具体示例如下:
with open('test.txt', 'r+') as f:
# 通过文件对象f进行读写操作
使用with-as语句后,就不需要再使用close()方法,另外with-as语句还可以打开多个文件,具体示例如下:
with open('test1.txt', 'r+') as f1, open('test2.txt', 'a+') as f2:
# 通过文件对象f1、f2分别操作test1.txt、test2.txt文件
从上述示例中可看出,with-as语句极大的简化了文件打开与关闭,这对保持代码的优雅性是有极大帮助的。