पायथन का उपयोग करके gz फ़ाइल को अनज़िप कैसे करें


87

मुझे एक gz फ़ाइल निकालने की ज़रूरत है जो मैंने एफ़टीपी साइट से एक स्थानीय विंडोज फ़ाइल सर्वर पर डाउनलोड की है। मेरे पास फ़ाइल के स्थानीय पथ के लिए चर सेट हैं, और मुझे पता है कि इसका उपयोग GZIP मैडल द्वारा किया जा सकता है।

मैं यह कैसे कर सकता हूँ? GZ फ़ाइल के अंदर फ़ाइल एक XML फ़ाइल है।


5
क्या हम देख सकते हैं कि आपने क्या प्रयास किया है?
14

1
यह इतना नीचा क्यों है? यह सवाल उतना बुरा नहीं हो सकता है कि एकतरफा उठाव के साथ 2 जवाब हैं।
पाउलो नेव्स

@PauloNeves शायद क्योंकि यह सवाल अपने लेखक से बिल्कुल भी कोई शोध नहीं दिखाता है।
bfontaine

जवाबों:


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
आपने दूसरा क्यों लगाया? क्या यह आम बात है? आप एक ही संदर्भ प्रबंधक
रोमैनएल के

1
शायद इसलिए कि आप f_in पढ़ते हैं और f_out लिखते हैं। डॉक्स के अनुसार आपको रीड ओब्ज और राइट ओबज के लिए डायम्स , डॉक्सहोमथॉन डॉट ओआरजी / 3 / library / shutil.html#shutil.copyfileobj की जरूरत है
paxton91michael

@ मूत कंधे यू भी बंद f_in और f_out?
जेजे

7
@ जय: यह 'के साथ' कथन का उद्देश्य है। यह "के साथ" अनुभाग में मौजूद f_in.close () को निष्पादित करता है। वास्तव में उपयोगी है अगर कुछ गलत हो रहा है (अपवाद की तरह)। यह सुनिश्चित करता है कि संसाधन बंद हो गया है
स्वीटड्रीम

1
ध्यान दें कि shutil.copyfileobj()एक तीसरा पैरामीटर है length: "पूर्णांक लंबाई, यदि दी गई है, तो बफर आकार है। विशेष रूप से, एक नकारात्मक लंबाई मान का अर्थ है कि डेटा को स्रोत डेटा पर बिना चंक्स के कॉपी करना; डिफ़ॉल्ट रूप से डेटा विखंडू में पढ़ा जाता है। अनियंत्रित मेमोरी खपत से बचें। "
नोरोक 2


9

शायद आप इसे पंडों को भी पास करना चाहते हैं।

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

    features_train = pd.read_csv(f)

features_train.head()

2
पंडों का इससे क्या लेना-देना? " GZ फ़ाइल के अंदर फ़ाइल एक XML फ़ाइल है " - OP
cz

4

कोई सटीक उत्तर नहीं है क्योंकि आप xml डेटा का उपयोग कर रहे हैं और वर्तमान में कोई pd.read_xml()फ़ंक्शन नहीं है (v0.23.4 के रूप में), लेकिन पांडा (v0.21.0 के साथ शुरू) आपके लिए फ़ाइल को अनलॉक्ड कर सकता है! धन्यवाद वेस!

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
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन समस्या को हल करने के तरीके के बारे में अतिरिक्त संदर्भ प्रदान करता है और यह समस्या को हल करता है ताकि उत्तर के दीर्घकालिक मूल्य में सुधार हो सके।
निक 3500

1
बहुत बढ़िया जवाब। यह बस बहुत सरल (pythonic) तरीके से एक संपीड़ित जोंस पढ़ता है।
लॉर्डकेंज़िन

4

यदि आप फ़ाइल को अनज़िप करने के बाद पार्स कर रहे हैं, तो डिकोड () विधि का उपयोग करना न भूलें , जब आप फ़ाइल को बाइनरी में खोलते हैं तो यह आवश्यक है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.