我需要读写大量的二进制文件.是否有一个首选或甚至最佳的字节数(我称之为BLOCK_SIZE)我应该一次读取()?
一个字节肯定太少了,我不认为在RAM中读取4 GB也不是一个好主意 – 是否有“最佳”块大小?或者这甚至取决于文件系统(我在ext4)?我需要考虑什么?
Python’s open()甚至提供缓冲参数.我还需要调整一下吗?
这是示例代码,它只是将0.data和in.1.data中的两个文件连接到out.data(在现实生活中,有更多的处理与手头的问题无关).选择BLOCK_SIZE等于io.DEFAULT_BUFFER_SIZE,这似乎是缓冲的默认值:
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)