Muszę rozpakować plik gz, który pobrałem z witryny FTP na lokalny serwer plików systemu Windows. Mam ustawione zmienne dla lokalnej ścieżki pliku i wiem, że może być używane przez błotnisty GZIP.
Jak mogę to zrobić? Plik wewnątrz pliku GZ jest plikiem XML.
python
python-2.7
gzip
Darkdeamon
źródło
źródło
Odpowiedzi:
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)
źródło
shutil.copyfileobj()
ma trzeci parametrlength
: „Długość całkowita, jeśli jest podana, to rozmiar bufora. W szczególności ujemna wartość długości oznacza kopiowanie danych bez zapętlania danych źródłowych w fragmentach; domyślnie dane są odczytywane fragmentami do unikaj niekontrolowanego zużycia pamięci ”.Z dokumentacji:
import gzip f = gzip.open('file.txt.gz', 'rb') file_content = f.read() f.close()
źródło
Może chcesz to również przekazać pandom.
with gzip.open('features_train.csv.gz') as f: features_train = pd.read_csv(f) features_train.head()
źródło
Nie jest to dokładna odpowiedź, ponieważ używasz danych xml i obecnie nie ma żadnej
pd.read_xml()
funkcji (od wersji 0.23.4), ale pandy (od wersji 0.21.0) mogą zdekompresować plik za Ciebie! Dzięki 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()
źródło
Jeśli parsujesz plik po rozpakowaniu, nie zapomnij użyć metody decode () , jest to konieczne, gdy otwierasz plik jako binarny.
import gzip with gzip.open(file.gz, 'rb') as f: for line in f: print(line.decode().strip())
źródło
from sh import gunzip gunzip('/tmp/file1.gz')
źródło
sh
nie jest to część standardowej instalacji.