Python读取超大文件

当文件超大的时候,读取数据不能采用直接读的方式,要采用块chunk读取的方式,每次只取一小块。

示例:读取单行 10G 文件并根据分隔符进行分割

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def read_bigfile(f, seq):
"""
读取超大文件
:param f: file object
:param seq: 分隔符
:return:
"""
buf = '' # 缓冲区

while True:
while seq in buf:
pos = buf.index(seq)
yield buf[:pos]
buf = buf[pos + len(seq):] # 记得加上分隔符的长度,否则打印出第一个后就会死循环,不加的话下一个buf开头就是seq,然后返回的就是空

chunk = f.read(1024 * 10) # 按块读取
if not chunk:
yield buf
break
buf += chunk


if __name__ == '__main__':
with open('access/big_file_input.txt', 'r') as f:
for row in read_bigfile(f, '{|}'):
print(row)

文件示例:

1
123{|}234123{|}234123{|}234123{|}234123{|}234123{|}234123{|}234123{|}234123{|}23412312

返回结果:

1
2
3
4
5
6
7
8
9
10
123
234123
234123
234123
234123
234123
234123
234123
234123
23412312