gzip un archivo en Python

Quiero gzip un archivo en Python. Estoy intentando usar subprocss.check_call (), pero sigue fallando con el error ‘OSError: [Errno 2] No hay tal archivo o directorio’. ¿Hay algún problema con lo que estoy tratando aquí? ¿Hay una mejor manera de gzip un archivo que usar subprocess.check_call?

from subprocess import check_call def gZipFile(fullFilePath) check_call('gzip ' + fullFilePath) 

¡¡Gracias!!

Prueba esto:

 check_call(['gzip', fullFilePath]) 

Dependiendo de lo que esté haciendo con los datos de estos archivos, el enlace de Skirmantas a http://docs.python.org/library/gzip.html también puede ser útil. Tenga en cuenta los ejemplos cerca de la parte inferior de la página. Si no necesita acceder a los datos, o no tiene los datos ya en su código Python, ejecutar gzip puede ser la forma más limpia de hacerlo para que no tenga que manejar los datos en Python.

Hay un módulo gzip . Uso:

Ejemplo de cómo crear un archivo GZIP comprimido:

 import gzip content = b"Lots of content here" f = gzip.open('/home/joe/file.txt.gz', 'wb') f.write(content) f.close() 

Ejemplo de cómo comprimir GZIP un archivo existente:

 import gzip f_in = open('/home/joe/file.txt') f_out = gzip.open('/home/joe/file.txt.gz', 'wb') f_out.writelines(f_in) f_out.close() f_in.close() 

EDITAR:

La respuesta de Jace Browning al usar with Python> = 2.7 es obviamente más concisa y legible, por lo que mi segundo fragmento debería (y debería) verse como:

 import gzip with open('/home/joe/file.txt', 'rb') as f_in, gzip.open('/home/joe/file.txt.gz', 'wb') as f_out: f_out.writelines(f_in) 

En formato Python 2.7:

 import gzip with open("path/to/file", 'rb') as orig_file: with gzip.open("path/to/file.gz", 'wb') as zipped_file: zipped_file.writelines(orig_file) 

Aún más corto (Probado en python 2.7.6)

 with open('path/to/file') as src, gzip.open('path/to/file.gz', 'wb') as dst: dst.writelines(src) 

Usa el módulo gzip :

 import gzip import os in_file = "somefile.data" in_data = open(in_file, "rb").read() out_gz = "foo.gz" gzf = gzip.open(out_gz, "wb") gzf.write(in_data) gzf.close() # If you want to delete the original file after the gzip is done: os.unlink(in_file) 

Su error: OSError: [Errno 2] No such file or directory' le indica que el archivo fullFilePath no existe. Si aún necesita seguir esa ruta, asegúrese de que el archivo exista en su sistema y que esté utilizando una ruta absoluta no relativa.

La documentación sobre esto es en realidad increíblemente sencilla.

Ejemplo de cómo leer un archivo comprimido:

 import gzip f = gzip.open('file.txt.gz', 'rb') file_content = f.read() f.close() 

Ejemplo de cómo crear un archivo GZIP comprimido:

 import gzip content = "Lots of content here" f = gzip.open('file.txt.gz', 'wb') f.write(content) f.close() 

Ejemplo de cómo comprimir GZIP un archivo existente:

 import gzip f_in = open('file.txt', 'rb') f_out = gzip.open('file.txt.gz', 'wb') f_out.writelines(f_in) f_out.close() f_in.close() 

https://docs.python.org/2/library/gzip.html

Esa es toda la documentación. . .

 import gzip def gzip_file(src_path, dst_path): with open(src_path, 'rb') as src, gzip.open(dst_path, 'wb') as dst: for chunk in iter(lambda: src.read(4096), b""): dst.write(chunk) 

De los documentos para Python3.

Gzip un archivo existente

 import gzip import shutil with open('file.txt', 'rb') as f_in: with gzip.open('file.txt.gz', 'wb') as f_out: shutil.copyfileobj(f_in, f_out) # or because I hate nested with statements import gzip import shutil from contextlib import ExitStack with ExitStack() as stack: f_in = stack.enter_context(open('file.txt', 'rb')) f_out = stack.enter_context(gzip.open('file.txt.gz', 'wb')) shutil.copyfileobj(f_in, f_out) 

Crea un nuevo archivo gzip:

 import gzip content = b"Lots of content here" with gzip.open("file.txt.gz", "wb") as f: f.write(content) 

Tenga en cuenta el hecho de que el contenido se convierte en bytes

Otro método para si no está creando contenido como un literal de cadena / byte como el ejemplo anterior sería

 import gzip # get content as a string from somewhere else in the code with gzip.open("file.txt.gz", "wb") as f: f.write(content.encode("utf-8")) 

Vea esta pregunta SO para una discusión de otros métodos de encoding.