解压缩bz2文件 [英] Decompress bz2 files
问题描述
我想解压缩位于不同路径的不同目录中的文件。
并且代码如下,并且错误是无效的数据流。请帮帮我。
I would like to decompress the files in different directories which are in different routes. And codes as below and the error is invalid data stream. Please help me out. Thank you so much.
import sys
import os
import bz2
from bz2 import decompress
path = "Dir"
for(dirpath,dirnames,files)in os.walk(path):
for file in files:
filepath = os.path.join(dirpath,filename)
newfile = bz2.decompress(file)
newfilepath = os.path.join(dirpath,newfile)
推荐答案
bz2.compress / decompress处理二进制数据:
bz2.compress/decompress work with binary data:
>>> import bz2
>>> compressed = bz2.compress(b'test_string')
>>> compressed
b'BZh91AY&SYJ|i\x05\x00\x00\x04\x83\x80\x00\x00\x82\xa1\x1c\x00 \x00"\x03h\x840"
P\xdf\x04\x99\xe2\xeeH\xa7\n\x12\tO\x8d \xa0'
>>> bz2.decompress(compressed)
b'test_string'
简而言之-您需要处理手动文件内容。如果文件很大,则最好使用 bz2.BZ2Decompressor
而不是 bz2.decompress
,因为后者要求您将整个文件存储在字节数组中。
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))
您也可以使用 bz2.BZ2File
使其更简单:
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)
这篇关于解压缩bz2文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!