Python kullanarak gz dosyası nasıl açılır


88

Bir FTP sitesinden indirdiğim bir gz dosyasını yerel bir Windows dosya sunucusuna çıkarmam gerekiyor. Dosyanın yerel yolu için ayarlanmış değişkenlere sahibim ve bunun GZIP karışıklığı tarafından kullanılabileceğini biliyorum.

Bunu nasıl yapabilirim? GZ dosyasının içindeki dosya bir XML dosyasıdır.


5
Ne denediğini görebilir miyiz lütfen?
heinst

1
Neden bu kadar olumsuz oy verildi? Yukarıdaki üniter oyları olan 2 cevap olduğu için soru o kadar da kötü olamaz.
Paulo Neves

@PauloNeves muhtemelen soru yazarından hiçbir araştırma göstermediğinden.
bfontaine

Yanıtlar:


145
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)

3
neden bir saniye koydun? bu yaygın bir uygulama mı? aynı bağlam yöneticisi
RomainL

1
Muhtemelen f_in okuyup f_out yazdığınız içindir. Dokümanlara göre, read obj ve write obj için parametrelere ihtiyacınız var, docs.python.org/3/library/shutil.html#shutil.copyfileobj .
paxton91michael

@Matt f_in ve f_out'u da kapatmanız gerekmez mi?
JeyJ

7
@JeyJ: 'with' ifadesinin amacı budur. "With" bölümünün varlığında f_in.close () çalıştırır. Bir şeyler ters giderse gerçekten faydalıdır (bir istisna gibi). Kaynağın kapalı olduğundan emin olur
sweetdream

1
shutil.copyfileobj()Üçüncü bir parametreye sahip olduğuna dikkat edin length: "Verilirse, tamsayı uzunluğu arabellek boyutudur. Özellikle, negatif bir uzunluk değeri, verilerin yığınlar halinde kaynak veriler üzerinde döngü oluşturmadan kopyalanması anlamına gelir; varsayılan olarak veriler, parçalar halinde okunur. kontrolsüz bellek tüketiminden kaçının. "
norok2

31

Belgelerden:

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

bu çözüm benim için herhangi bir kitaplığı içe aktarmadan python 2.7 üzerinde çalışıyor, @heinst çok teşekkürler
Farzad Farazmand

10

Belki pandalara da vermek istersiniz.

with gzip.open('features_train.csv.gz') as f:

    features_train = pd.read_csv(f)

features_train.head()

2
Bunun Pandalar ile ne ilgisi var? " GZ dosyasının içindeki dosya bir XML dosyasıdır " - OP
cz

4

Tam bir cevap değil çünkü xml verilerini kullanıyorsunuz ve şu anda bir pd.read_xml()işlev yok (v0.23.4 itibariyle), ancak pandalar (v0.21.0 ile başlayan) dosyayı sizin için açabilir! Teşekkürler 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()

3
Bu kod soruyu yanıtlayabilirken, sorunun nasıl ve / veya neden çözüldüğüne ilişkin ek bağlam sağlamak, yanıtlayanın uzun vadeli değerini artıracaktır.
Nic3500

1
mükemmel cevap. Çok basit (pitonik) bir şekilde sıkıştırılmış bir json okur.
lordcenzin

4

Dosyayı açtıktan sonra ayrıştırıyorsanız, bir dosyayı ikili olarak açtığınızda decode () yöntemini kullanmayı unutmayın .

import gzip
with gzip.open(file.gz, 'rb') as f:
    for line in f:
        print(line.decode().strip())

2
from sh import gunzip

gunzip('/tmp/file1.gz')

13
Bunun shstandart kurulumun parçası olmadığını unutmayın .
Noumenon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.