2012-05-12 14 views
32

क्या फ़ाइल को पूरी तरह से निकाले बिना पायथन का उपयोग करके जीजी-संपीड़ित टेक्स्ट फ़ाइल से एक रेखा को पढ़ना आसान है? मेरे पास text.gz फ़ाइल है जो 200 एमबी है। जब मैं इसे निकालता हूं, तो यह 7.4 जीबी बन जाता है। और यह एकमात्र फाइल नहीं है जिसे मुझे पढ़ना है। कुल प्रक्रिया के लिए, मुझे 10 फाइलें पढ़नी होंगी। यद्यपि यह एक अनुक्रमिक नौकरी होगी, मुझे लगता है कि यह पूरी जानकारी को निष्कासित किए बिना ऐसा करने के लिए एक स्मार्ट चीज होगी। मुझे यह भी नहीं पता कि यह संभव है। पाइथन का उपयोग करके यह कैसे किया जा सकता है? मुझे एक टेक्स्ट फ़ाइल लाइन-दर-रेखा पढ़ने की जरूरत है।पायथन: संपीड़ित पाठ फ़ाइलों से लाइनें पढ़ें

उत्तर

12

क्या आपने gzip.GzipFile का उपयोग करने का प्रयास किया है? तर्क open के समान हैं।

38

आप पाइथन में मानक gzip मॉड्यूल का उपयोग कर सकते हैं। बस उपयोग करें:

gzip.open('myfile.gz') 

फ़ाइल को किसी अन्य फ़ाइल के रूप में खोलने और इसकी रेखाओं को पढ़ने के लिए।

अधिक यहाँ जानकारी: Python gzip module

+0

जिज्ञासा से बाहर यह पूरी फ़ाइल को स्मृति में लोड करता है? या क्या यह आवश्यकतानुसार लाइनों को लोड करने के लिए पर्याप्त स्मार्ट है? –

+1

@Sachin_ruk यह फ़ाइल लोड नहीं करता है जो इसे खोलता है। वास्तव में फ़ाइल से डेटा लोड करने के लिए आपको एक समय में लाइन पढ़ने के लिए '' f.readline() '' '' करने की आवश्यकता है। या 'f.readlines (N)' '' '' '' ''''' उन पंक्तियों की संख्या है जिन्हें आप पढ़ना चाहते हैं। – Tom

22

का उपयोग gzip.GzipFile:

import gzip 

with gzip.open('input.gz','r') as f: 
    for line in f: 
     print('got line', line) 

नोट : python3 के लिए आप है फ़ाइल निर्दिष्ट करने के लिए द्विआधारी पढ़ने के लिए 'rt' में खोलने के लिए, 'r' चूक के रूप में, या अन्यथा line.decode(...) का उपयोग करें।

नोट : gzip.open(filename, mode)gzip.GzipFile(filename, mode) के लिए उपनाम है। मैं पूर्व को पसंद करता हूं, क्योंकि यह असम्पीडित फ़ाइलों को खोलने के लिए with open(...) as f: जैसा दिखता है।

+18

python3 के लिए आपको 'आरटी' में खोला जाने वाला फ़ाइल निर्दिष्ट करना होगा, क्योंकि 'आर' बाइनरी रीडिंग के लिए डिफ़ॉल्ट है। – kap

+1

या 'line.decode()' का उपयोग करें – dmeu

संबंधित मुद्दे