python - bz2 - install tar.gz ubuntu
Descomprimir archivos bz2 (3)
Me gustaría descomprimir los archivos en diferentes directorios que están en diferentes rutas. Y los códigos como abajo y el error es un flujo de datos no válido. Por favor, ayúdame. Muchas gracias.
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)
Esto debería funcionar
for file in files:
archive_path = os.path.join(dirpath,filename)
outfile_path = os.path.join(dirpath, filename[:-4])
with open(archive_path, ''rb'') as source, open(outfile_path, ''wb'') as dest:
dest.write(bz2.decompress(source.read()))
bz2.compress / descomprime el trabajo con datos binarios:
>>> 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''
En resumen, es necesario procesar el contenido del archivo manualmente. En caso de que tenga archivos muy grandes, debería preferir usar bz2.BZ2Decompressor
a bz2.decompress
, porque este último requiere que almacene el archivo completo en una matriz de bytes.
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))
También puede usar bz2.BZ2File
para hacer esto aún más simple:
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.decompress
toma datos comprimidos y los infla. ¡Usted pasa un nombre de archivo, no los datos en el archivo!
Haga esto en su lugar:
zipfile = bz2.BZ2File(filepath) # open the file
data = zipfile.read() # get the decompressed data
newfilepath = filepath[:-4] # assuming the filepath ends with .bz2
open(newfilepath, ''wb'').write(data) # write a uncompressed file