一、open()函数的基本用法
在介绍区别之前先简单说明 open() 函数的用法,分为以下三个部分:
1. 读取文件
使用格式:
文件句柄 = open('文件路径', '模式',编码方式)
流程如下:
f = open(file_path, 'r', encoding='utf-8') # 打开文件, 编码方式可省略,一般取默认
data = f.read() # 读取文件
print(data) # 打印读取内容
f.close() # 关闭文件
或
with open(file_name, 'r') as f:
data = f.read() # 读取文件
print(data) # 打印读取内容
注意,上述文件的 file_path 也就是文件的路径,可以是绝对路径(文件在硬盘的位置路径),也可以是相对路径(与脚本同在一个目录下)。
上述读取文件是使用 read () 表示读取整个文件的内容,也可以使用 readline() 表示读取文件一行,或 readlines() 按行读取文件内容。最后要使用 close() 函数关闭文件。
2. 打开模式
模式的参数也就是第二个参数,主要有以下模式:
r 以只读方式打开文件。这是默认模式,文件必须存在,不存在抛出错误
rb 以二进制格式打开一个文件用于只读。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头,读完就追加。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
注:后面有带 b 的方式,不需要考虑编码方式。带 + 号的,则可读可写,不过它们之间还是有区别的。
3. 编码方式
- win系统默认是gbk编码的,所以桌面生成的TXT之类的都是gbk编码的;
- 出现乱码,一般都是原文件的编码方式和打开指定的编码不一致所致。
二、open(),close()与 with open()的区别
这也是我们平时读取文件容易忽略的地方。
- 一般是使用 open() 和 close() 组合来打开和关闭文件。
但这样做时,如果程序存在bug,导致close()语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能会导致数据丢失或受损。如果在程序中过早地调用close(),你会发现需要使用文件时它已关闭(无法访问),这会导致更多的错误。 - 关键字 with 在不再需要访问文件后自动将其关闭。
在这个程序中,注意到我们调用了open(),但没有调用close();并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用关键字 with,可让Python去确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。