bz2.compress/decompress work with binary data:
>>> import bz2
>>> compressed = bz2.compress(b'test_string')
>>> compressed
b'BZh91AY&SYJ|ix05x00x00x04x83x80x00x00x82xa1x1cx00 x00"x03hx840"
Pxdfx04x99xe2xeeHxa7
x12Ox8d xa0'
>>> bz2.decompress(compressed)
b'test_string'
In short - you need to process file contents manually. In case you have very large files you should prefer using bz2.BZ2Decompressor
to bz2.decompress
, because the latter requires that you store the entire file in a byte array.
for filename in files:
filepath = os.path.join(dirpath, filename)
newfilepath = os.path.join(dirpath,filename + '.decompressed')
with open(newfilepath, 'wb') as new_file, open(filepath, 'rb') as file:
decompressor = BZ2Decompressor()
for data in iter(lambda : file.read(100 * 1024), b''):
new_file.write(decompressor.decompress(data))
You can also use bz2.BZ2File
to make this even simpler:
for filename in files:
filepath = os.path.join(dirpath, filename)
newfilepath = os.path.join(dirpath, filename + '.decompressed')
with open(newfilepath, 'wb') as new_file, bz2.BZ2File(filepath, 'rb') as file:
for data in iter(lambda : file.read(100 * 1024), b''):
new_file.write(data)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…