我有一个超过 10GB 的 BZ2 文件。我想在不将其解压缩为临时文件的情况下阅读它(它将超过 50GB)。
使用这种方法:
import bz2, time
t0 = time.time()
time.sleep(0.001) # to avoid / by 0
with bz2.open("F:\test.bz2", 'rb') as f:
for i, l in enumerate(f):
if i % 100000 == 0:
print('%i lines/sec' % (i/(time.time() - t0)))
我每秒只能读取 ~ 250k 行。在一个类似的文件上,首先解压缩,我每秒得到大约 3M 行,即 x10 因子:
with open("F:\test.txt", 'rb') as f:
我认为这不仅是由于固有的解压 CPU 时间(因为解压到临时文件的总时间 + 读取为未压缩文件的总时间远小于此处描述的方法),还可能是由于缺乏缓冲或其他原因。还有其他更快的 Python 实现bz2.open
吗?
如何以二进制模式加速 BZ2 文件的读取并循环“行”?(由 分隔\n
)
注意:目前time to decompress test.bz2 into test.tmp + time to iterate over lines of test.tmp
远小于time to iterate over lines of bz2.open('test.bz2')
,这可能不应该是这种情况。
链接主题:https ://discuss.python.org/t/non-optimal-bz2-reading-speed/6869