我需要读写巨大的二进制文件。是否有一个我一次应该read()的首选甚至最佳字节数(我称之为BLOCK_SIZE)?在
一个字节当然太少了,我也不认为在RAM中读取4GB也是个好主意——有没有一个“最佳”的块大小?或者这取决于文件系统(我使用ext4)?我需要考虑什么?在
Python's ^{}甚至提供了一个buffering参数。我也需要调整一下吗?在
这是一个示例代码,它将两个文件in-0.data和in-1.data连接到out.data(在现实生活中,有更多的处理与手头的问题无关)。选择的BLOCK_SIZE等于^{},这似乎是buffering的默认值:from pathlib import Path
from functools import partial
DATA_PATH = Path(__file__).parent / '../data/'
out_path = DATA_PATH / 'out.data'
in_paths = (DATA_PATH / 'in-0.data', DATA_PATH / 'in-1.data')
BLOCK_SIZE = 8192
def process(data):
pass
with out_path.open('wb') as out_file:
for in_path in in_paths:
with in_path.open('rb') as in_file:
for data in iter(partial(in_file.read, BLOCK_SIZE), b''):
process(data)
out_file.write(data)
# while True:
# data = in_file.read(BLOCK_SIZE)
# if not data:
# break
# process(data)
# out_file.write(data)