Python'da dosyaları açma


Yanıtlar:


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

Hepsi bukadar!


7
.zip arşivinin içeriği tüm .zip arşivlerinde aynıysa ne olur? çıkarmadan önce içerik nasıl yeniden adlandırılır? örnek: 1.zip 2.zip .. hepsi content.txt içeriyor: 1content.txt gibi içerik ayıklayın 2content.txt?
iratzhash

8
@iratzhash Genellikle tempfile kullanarak içerikler için yeni bir geçici dizin oluştururum: docs.python.org/3/library/tempfile.html Geçici dizine açarım ve dosyaları oradan taşır / düzenlerim.
Dave Forgac

8
@ 3kstc isterim from zipfile import ZipFile. Kullanırken, artık kullanmanıza gerek yoktur zipfile.ZipFileve kullanabilirsiniz ZipFile(zip_file_name).
Hata ayıklama255

@iratzhash 1,5 yıl önce yorum yaptığını anlıyorum. Ancak başkalarının bildiği gibi, genellikle bir zip dosyasındaki içerik salt okunurdur. "Bouke" tarafından iyi bir cevap burada
Debug255

Bir çeşit meta notu, ancak Kasım 2018'deki düzenleme bunu, içerik yöneticisini zaten kullanan başka bir yanıta (ve bunun ne anlama geldiğine bağlantı veriyor) benzer hale getiriyor.
Engineero

304

Eğer kullanıyorsanız 3.2 Python ya da geç:

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

Kullanılacak ihtiyaç kalmayacağı yakın veya try / catch kullandığı olarak bununla bağlam yöneticisi inşaatı.


18
ZipFile ayrıca 2.7 veya üzeri sürümlerde içerik yöneticisi olarak çalışır: docs.python.org/2/library/zipfile.html#zipfile.ZipFile
FelixEnescu

Docs.python.org/3.6/library/zipfile.html#zipfile.BadZipFile istisnasıyla nasıl başa çıkılır ? Genel olarak, bağlam yöneticisi (deyim içeren) ile try / hariç kullanmak için en iyi uygulama hangisidir?
SnowOnion

1
zipfile+ pathlib= kazan. Cevabınızı biraz günceller miyim?
Datanovice

38

extractallPython 2.6+ kullanıyorsanız yöntemi kullanın

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

Bir hedef belirtmenize gerek yok (zip.extractall (hedef))?
asonnenschein

3
Sadece zipfile ile aynı dizine çıkarıyorsanız
Dan Gayle

10
@DanGayle, zip dosyasının geçerli çalışma dizinine çıkarıldığı anlaşılıyor, zip dosyasının konumu DEĞİL
Brian Leishman

4
benim için ZipFile () işe yaramadı ama zipfile.ZipFile () yaptı - ithalat zipfile sonra
Agile Bean

6

Ayrıca yalnızca şunları da içe aktarabilirsiniz ZipFile:

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

Çalışıyor Python 2 ve Python 3 .


1
İlginiz için teşekkür ederiz @MylesHollowed Ancak, bu kabul edilen yanıtın bir kopyası değil. Birbirlerine benzediklerine katılıyorum, ama farklılar. Bu aynı zamanda yorumunuzla da belirtilir, çünkü kabul edilen sizin için benimkinden kesinlikle daha iyidir. Bir kopya olsaydı, aynı olurdu ... Birisi için cevabım değerli olabilir, çünkü belki daha okunabilir ve daha az kod içe aktardığını fark ettiğiniz gibi ... Bu farklılıklar nedeniyle cevabımı koymaya karar verdim bir alternatif vermek. Bu yüzden bir cevap kabul ettikten sonra başka cevaplar koyabilir miyiz? En iyisi
simhumileco

Bu sorunun nesi var? Neden birisi ona olumsuz bir nokta verdi? Sonuçta, sorunun cevabıdır ve bir cevap arayan bazı insanlar için önemli olabilecek diğer cevaplara kıyasla sadeliği ile ayırt edilir. Öyle değil mi?
simhumileco

1
@MylesHollowed 3.6.5 sürümünde import zipfile.ZipFileoluşturur ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a package. Kendi açımdan operatör hatası olmaya açıkım, ama ne olduğunu bilmiyorum.
MikeF

6

bunu dene :


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

yol: dosyanın yolunu aç


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)

Bu, zip değilse dosya için doğrulama içermez. Klasör .zip dosyası içermiyorsa başarısız olur.

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.