首页 > 编程笔记

Python open()函数:打开文件

在 Python 中,使用 open() 函数可以打开文件。其语法格式如下:

open(file[,mode[,buffering]],encoding=None,errors=None)

open() 的参数

open() 函数中的参数有很多,这里介绍5个常用参数,这些参数的含义如下。

1) file参数

file 参数用于表示要打开的文件,可以是字符串或整数。

如果 file 是字符串,则表示文件名,文件名既可以是当前目录的相对路径,也可以是绝对路径;如果 file 是整数,则表示一个已经打开的文件。

2) mode参数

可选参数 mode 表示打开文件的模式,例如:
f=open('demo.txt','r')
这里的参数 r 表示以读模式打开文件。如果该文件存在,就创建一个 f 文件对象;如果该文件不存在,就提示异常信息。例如:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'demo.txt'
open 函数还有其他的模式参数,如表1所示。

表1:Python open() 函数中的模式参数
参数取值 说明
'r' 以读方式打开文件。文件的指针将会放在文件的开头,这是打开文本文件的默认方式。
'rb' 以二进制格式打开一个文件,用于只读。文件的指针将会放在文件的开头,这是打开非文本文件(例如图片)的默认方式。
'r+' 打开一个文件,用于读写。文件的指针将会放在文件的开头。
'rb+' 以二进制格式打开一个文件,用于读写。文件的指针将会放在文件的开头。
'w' 打开一个文件,只用于写入。如果该文件已存在,就将其覆盖;如果该文件不存在,就创建新文件。
'wb' 以二进制格式打开一个文件,只用于写入。如果该文件已存在,就将其覆盖;如果该文件不存在,就创建新文件。
'w+' 打开一个文件,用于读写。如果该文件已存在,就将其覆盖;如果该文件不存在,就创建新文件。
'wb+' 以二进制格式打开一个文件,用于读写。如果该文件已存在,就将其覆盖;如果该文件不存在,就创建新文件。
'a' 打开一个文件,用于追加。如果该文件已经存在,文件指针就会放在文件的结尾;如果该文件不存在,就创建新文件进行写入。
'ab' 以二进制格式打开一个文件,用于追加。如果该文件已经存在,文件指针就会放在文件的结尾;如果该文件不存在,就创建新文件进行写入。
'a+' 打开一个文件,用于读写。如果该文件已经存在,文件指针就会放在文件的结尾;如果该文件不存在,就创建新文件进行读写。
'ab+' 以二进制格式打开一个文件,用于追加。如果该文件已经存在,文件指针就会放在文件的结尾;如果该文件不存在,就创建新文件用于追加。

理解模式时需要注意的问题如下:

① 因为默认的模式为读模式,所以读模式和忽略不写的效果是一样的。'+' 参数可以添加到其他模式中,表示读和写是允许的,比如 'r+' 表示打开一个文件用来读写使用。例如:
f=open('demo.txt', 'r+')

② 'b' 参数主要应用于一些二进制文件,如声音和图像等,可以使用 'rb' 表示读取一个二进制文件。

注意区分文本文件和二进制文件:
③ 打开文件时,a 和 a+ 是有区别的。a 只能追加写入文件,不可读文件;而 a+ 既可以追加写入文件,也可以读文件。

3) buffering参数

open() 函数的可选参数 buffering 控制文件是否缓冲:
请看下面的例子:
f=open('demo.txt','r+',True)

4) encoding参数

可选参数 encoding 用来指定打开文件时的文件编码,默认是 UTF-8 编码,主要用于打开文本文件。

5) errors参数

可选参数 errors 用来指定在文本文件发生编码错误时如何处理。推荐 errors 参数的取值为 'ignore',表示在遇到编码错误时忽略该错误,程序会继续执行,不会退出。

2. open() 的写法

如果打开的文件中包含绝对路径,有3种写法:

1) 采用普通字符串表示绝对路径文件名,其中反斜杠需要转义。例如:
f=open(r'D:\file\demo.txt')

2) 采用普通字符串表示绝对路径文件名,其中反斜杠改为斜杠。例如:
f=open('D:/file/demo.txt')

3) 采用原始字符串表示绝对路径文件夹,其中反斜杠不需要转义。例如:
f=open('D:\\file\\demo.txt')

下面尝试使用各种方式打开文件,Python 代码如下:
f=open('demo.txt','w+')  #以w+模式打开文件,如果文件不存在,则创建该文件
f.write('hello')         #写入内容
  
f=open('demo.txt','r+')  #以r+模式打开文件,前面已经创建了该文件,这里会覆盖文件内容
f.write('world')         #重新写入内容
  
f=open('demo.txt','a')   #以a模式打开文件,会在文件末尾追加内容
f.write('world')         #追加新的内容
  
f=open('D:\\file\\demo.txt','a+')  #以a+模式打开文件,会在文件末尾追加内容
f.write('world')         #追加新的内容

推荐阅读