Necesito extraer un archivo gz que he descargado de un sitio FTP a un servidor de archivos local de Windows. Tengo las variables configuradas para la ruta local del archivo, y sé que GZIP confunde las puede usar.
¿Cómo puedo hacer esto? El archivo dentro del archivo GZ es un archivo XML.
python
python-2.7
gzip
Darkdeamon
fuente
fuente
Respuestas:
import gzip import shutil with gzip.open('file.txt.gz', 'rb') as f_in: with open('file.txt', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)
fuente
shutil.copyfileobj()
tiene un tercer parámetrolength
: "La longitud entera, si se proporciona, es el tamaño del búfer. En particular, un valor de longitud negativo significa copiar los datos sin recorrer los datos de origen en fragmentos; de forma predeterminada, los datos se leen en fragmentos para evitar el consumo incontrolado de memoria ".De la documentación:
import gzip f = gzip.open('file.txt.gz', 'rb') file_content = f.read() f.close()
fuente
Quizás también quieras pasárselo a los pandas.
with gzip.open('features_train.csv.gz') as f: features_train = pd.read_csv(f) features_train.head()
fuente
No es una respuesta exacta porque está usando datos xml y actualmente no hay ninguna
pd.read_xml()
función (a partir de v0.23.4), ¡pero los pandas (a partir de v0.21.0) pueden descomprimir el archivo por usted! ¡Gracias Wes!import pandas as pd import os fn = '../data/file_to_load.json.gz' print(os.path.isfile(fn)) df = pd.read_json(fn, lines=True, compression='gzip') df.tail()
fuente
Si está analizando el archivo después de descomprimirlo, no olvide usar el método decode () , es necesario cuando abre un archivo como binario.
import gzip with gzip.open(file.gz, 'rb') as f: for line in f: print(line.decode().strip())
fuente
from sh import gunzip gunzip('/tmp/file1.gz')
fuente
sh
no forma parte de la instalación estándar.