我有大量的bzip2压缩文本文件。未压缩,其中一些占用几GB,所以我想在我的脚本中使用压缩版本,而不是让未压缩版本占用磁盘空间。在这种情况下,由此引起的性能影响是可以接受的。
不幸的是,这些文件是用不同的压缩级别压缩的,所以当迭代它们时,我最终会遇到错误:
File "/usr/lib64/python3.6/bz2.py", line 219, in readline
return self._buffer.readline(size)
File "/usr/lib64/python3.6/_compression.py", line 68, in readinto
data = self.read(len(byte_view))
File "/usr/lib64/python3.6/_compression.py", line 103, in read
data = self._decompressor.decompress(rawblock, size)
OSError: Invalid data stream
我认为这是因为bz2.open()
接受了一个参数compresslevel
,一旦设置,就会应用于这样的调用中的所有文件:
import bz2
dataset = ['first-archive.bz2', 'second-archive.bz2']
for file in dataset:
with bz2.open(file, 'r', compresslevel=9) as f:
# do stuff to f
因此我的问题是:是否有可能使用Python或Unix工具来计算创建bzip2-archive时使用的压缩级别?