पायथन में फाइलें खोलना


435

मैं zipfileप्रलेखन के माध्यम से पढ़ा , लेकिन समझ नहीं सका कि किसी फाइल को कैसे खोलना है, केवल एक फाइल को कैसे ज़िप करना है। मैं ज़िप फ़ाइल की सभी सामग्रियों को एक ही निर्देशिका में कैसे खोलूँ?


संबंधित: अनज़िपिंग फाइल्स recursively stackoverflow.com/questions/28339000/… & stackoverflow.com/questions/36285502/…
तुंग

जवाबों:


784
import zipfile
with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref:
    zip_ref.extractall(directory_to_extract_to)

तो इतना ही है!


7
क्या होगा अगर .zip संग्रह की सामग्री सभी .zip अभिलेखागार में समान हो? निकालने से पहले सामग्री का नाम कैसे बदलें? उदाहरण: 1.zip 2.zip .. सभी में content.txt है: 1content.txt 2content.txt की तरह सभी निकालें?
iratzhash

8
@iratzhash मैं आमतौर पर tempfile का उपयोग करने वाली सामग्री के लिए एक नई अस्थायी निर्देशिका बनाता हूं : docs.python.org/3/library/tempfile.html I अस्थायी निर्देशिका के लिए अनज़िप करता हूं और वहां से फ़ाइलों को स्थानांतरित / व्यवस्थित करता हूं।
डेव फोर्गैक

8
@ 3kstc मैं करूँगा from zipfile import ZipFile। इसका उपयोग करते समय, आपको अब उपयोग करने की आवश्यकता नहीं है zipfile.ZipFile, और उपयोग कर सकते हैं ZipFile(zip_file_name)
डिबग 255

@iratzhash मुझे एहसास है कि आपने 1.5 साल पहले टिप्पणी की थी। लेकिन ऐसा सिर्फ दूसरे ही जानते हैं, आमतौर पर जिप फाइल के भीतर की सामग्री केवल पढ़ने के लिए होती है। एक अच्छा जवाब यहाँ है "
बुके

एक मेटा नोट की तरह, लेकिन नवंबर 2018 से संपादित यह एक और जवाब के समान है जो पहले से ही संदर्भ प्रबंधक का उपयोग करता है (और इसका मतलब है कि लिंक)।
इंजिनियरो

304

यदि आप पायथन 3.2 या उसके बाद का उपयोग कर रहे हैं :

import zipfile
with zipfile.ZipFile("file.zip","r") as zip_ref:
    zip_ref.extractall("targetdir")

आपको संदर्भ प्रबंधक निर्माण का उपयोग करने के लिए इसके साथ नज़दीकी या कोशिश / पकड़ का उपयोग करने की आवश्यकता नहीं है ।



Docs.python.org/3.6/library/zipfile.html#zipfile.BadZipFile अपवाद से कैसे निपटें ? आम तौर पर, प्रयास का उपयोग करने के लिए सबसे अच्छा अभ्यास क्या है / संदर्भ प्रबंधक (बयान के साथ) को छोड़कर?
स्नोयनियन

1
zipfile+ pathlib= जीत। अगर मैं आपके उत्तर को थोड़ा अपडेट करूं तो क्या होगा?
दातानोविस

38

extractallयदि आप पायथन 2.6+ का उपयोग कर रहे हैं, तो विधि का उपयोग करें

zip = ZipFile('file.zip')
zip.extractall()

क्या आपको कोई गंतव्य निर्दिष्ट नहीं करना है (zip.extractall (गंतव्य))?
asonnenschein

3
नहीं अगर तुम सिर्फ एक ही निर्देशिका में zipfile के रूप में निकाल रहे हैं
Dan Gayle

10
@DanGayle यह ज़िप फ़ाइल को वर्तमान कार्यशील निर्देशिका में निकालने के लिए प्रतीत होता है, ज़िप फ़ाइल का स्थान नहीं
ब्रायन लीशमैन

4
मेरे लिए, ZipFile () ने काम नहीं किया लेकिन zipfile.ZipFile () ने किया - आयात करने के बाद zipfile
फुर्तीली बीन

6

आप केवल आयात कर सकते हैं ZipFile:

from zipfile import ZipFile
zf = ZipFile('path_to_file/file.zip', 'r')
zf.extractall('path_to_extract_folder')
zf.close()

पायथन 2 और पायथन 3 में काम करता है ।


1
आपका ध्यान के लिए धन्यवाद @ शैलियोंहॉल्ड हालांकि, यह स्वीकृत उत्तर से कॉपी नहीं है। मैं सहमत हूं कि वे एक दूसरे के समान हैं, लेकिन वे अलग हैं। यह आपकी टिप्पणी से भी संकेत मिलता है, क्योंकि स्वीकृत मेरा निश्चित रूप से आपके लिए बेहतर है। यदि यह एक प्रतिलिपि थी, तो यह समान होगी ... किसी के लिए मेरा उत्तर मूल्यवान हो सकता है क्योंकि यह शायद अधिक पठनीय है और जैसा कि आपने देखा कि कम कोड आयात किया गया है ... यह इन मतभेदों के कारण है कि मैंने अपना जवाब देने का फैसला किया एक विकल्प देने के लिए। क्या ऐसा नहीं है कि हम एक को स्वीकार करने के बाद अन्य जवाब क्यों दे सकते हैं? सभी बेहतरीन
simhumileco

इस उत्तर में क्या गलत है? किसी ने उसे नकारात्मक बिंदु क्यों दिया? आखिरकार, यह सवाल का जवाब है और अन्य उत्तरों की तुलना में इसकी सादगी से अलग है, जो कुछ लोगों के लिए महत्वपूर्ण हो सकता है जो उत्तर की तलाश में हैं। है ना?
सिमह्युमिलको

1
@ शैलियाँ । 3.6.5 में import zipfile.ZipFileउत्पन्न ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packageहोती हैं। मैं अपनी ओर से ऑपरेटर की त्रुटि के लिए खुला हूं, लेकिन मुझे नहीं पता कि यह क्या है।
MikeF

6

इसे इस्तेमाल करे :


import zipfile
def un_zipFiles(path):
    files=os.listdir(path)
    for file in files:
        if file.endswith('.zip'):
            filePath=path+'/'+file
            zip_file = zipfile.ZipFile(filePath)
            for names in zip_file.namelist():
                zip_file.extract(names,path)
            zip_file.close() 

पथ: अनज़िप फ़ाइल का पथ


3
import os 
zip_file_path = "C:\AA\BB"
file_list = os.listdir(path)
abs_path = []
for a in file_list:
    x = zip_file_path+'\\'+a
    print x
    abs_path.append(x)
for f in abs_path:
    zip=zipfile.ZipFile(f)
    zip.extractall(zip_file_path)

यह ज़िप नहीं है, तो फ़ाइल के लिए सत्यापन शामिल नहीं है। यदि फ़ोल्डर में गैर .zip फ़ाइल है तो वह विफल हो जाएगी।

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