使用 Python 读写文件很方便,有多种方法,但是读写大文件还是需要优化的。

python open 文件的模式:

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

读取小文件

小文件读取可以用 readlines(), 返回一个列表

1
2
with open("test.txt", 'r') as f:
print(f.readlines())

以上代码执行的结果 (换行符用\n 表示):

1
['111\n', '222\n', '333\n']

按行读取超大文件

文件如果比较大,就不能使用 readlines() 来读取了,那样会占用大量内存。可以使用遍历 readline() 方法来实现

1
2
3
4
5
6
7
with open("test.txt", 'r') as f:
while True:
line = f.readline()
if line:
print(line, end="")
else:
break

写入文件

1
2
with open('test.txt', 'w') as f:
f.write(data)

写入大文件

写入大文件一般都是追加写入

1
2
3
with open('test.txt', 'a') as f:
while True:
f.write('Hello, world!')