首页 > 编程笔记
Python open()函数:打开文件
在 Python 中,使用 open() 函数可以打开文件。其语法格式如下:
如果 file 是字符串,则表示文件名,文件名既可以是当前目录的相对路径,也可以是绝对路径;如果 file 是整数,则表示一个已经打开的文件。
理解模式时需要注意的问题如下:
① 因为默认的模式为读模式,所以读模式和忽略不写的效果是一样的。'+' 参数可以添加到其他模式中,表示读和写是允许的,比如 'r+' 表示打开一个文件用来读写使用。例如:
② 'b' 参数主要应用于一些二进制文件,如声音和图像等,可以使用 'rb' 表示读取一个二进制文件。
注意区分文本文件和二进制文件:
③ 打开文件时,a 和 a+ 是有区别的。a 只能追加写入文件,不可读文件;而 a+ 既可以追加写入文件,也可以读文件。
请看下面的例子:
1) 采用普通字符串表示绝对路径文件名,其中反斜杠需要转义。例如:
2) 采用普通字符串表示绝对路径文件名,其中反斜杠改为斜杠。例如:
3) 采用原始字符串表示绝对路径文件夹,其中反斜杠不需要转义。例如:
下面尝试使用各种方式打开文件,Python 代码如下:
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所示。
参数取值 | 说明 |
---|---|
'r' | 以读方式打开文件。文件的指针将会放在文件的开头,这是打开文本文件的默认方式。 |
'rb' | 以二进制格式打开一个文件,用于只读。文件的指针将会放在文件的开头,这是打开非文本文件(例如图片)的默认方式。 |
'r+' | 打开一个文件,用于读写。文件的指针将会放在文件的开头。 |
'rb+' | 以二进制格式打开一个文件,用于读写。文件的指针将会放在文件的开头。 |
'w' | 打开一个文件,只用于写入。如果该文件已存在,就将其覆盖;如果该文件不存在,就创建新文件。 |
'wb' | 以二进制格式打开一个文件,只用于写入。如果该文件已存在,就将其覆盖;如果该文件不存在,就创建新文件。 |
'w+' | 打开一个文件,用于读写。如果该文件已存在,就将其覆盖;如果该文件不存在,就创建新文件。 |
'wb+' | 以二进制格式打开一个文件,用于读写。如果该文件已存在,就将其覆盖;如果该文件不存在,就创建新文件。 |
'a' | 打开一个文件,用于追加。如果该文件已经存在,文件指针就会放在文件的结尾;如果该文件不存在,就创建新文件进行写入。 |
'ab' | 以二进制格式打开一个文件,用于追加。如果该文件已经存在,文件指针就会放在文件的结尾;如果该文件不存在,就创建新文件进行写入。 |
'a+' | 打开一个文件,用于读写。如果该文件已经存在,文件指针就会放在文件的结尾;如果该文件不存在,就创建新文件进行读写。 |
'ab+' | 以二进制格式打开一个文件,用于追加。如果该文件已经存在,文件指针就会放在文件的结尾;如果该文件不存在,就创建新文件用于追加。 |
理解模式时需要注意的问题如下:
① 因为默认的模式为读模式,所以读模式和忽略不写的效果是一样的。'+' 参数可以添加到其他模式中,表示读和写是允许的,比如 'r+' 表示打开一个文件用来读写使用。例如:
f=open('demo.txt', 'r+')
② 'b' 参数主要应用于一些二进制文件,如声音和图像等,可以使用 'rb' 表示读取一个二进制文件。
注意区分文本文件和二进制文件:
- 在文本文件的内部以字符形式存储数据,字符是有编码的,例如常见的 UTF-8 和 GBK 编码。
- 在二进制文件的内部以字节形式存储数据,没有编码的概念。Windows 系统中常见的图片、Word、Excel 和 PPT 等文件都是二进制文件。
③ 打开文件时,a 和 a+ 是有区别的。a 只能追加写入文件,不可读文件;而 a+ 既可以追加写入文件,也可以读文件。
3) buffering参数
open() 函数的可选参数 buffering 控制文件是否缓冲:- 若该参数为 1 或 True,则表示有缓冲。数据的读取操作通过内存来运行,只有使用 flush() 或 close() 函数,才会更新硬盘上的数据。
- 若该参数为 0 或 False,则表示无缓冲,所有的读写操作都直接更新硬盘上的数据。
请看下面的例子:
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') #追加新的内容