Przeczytałem zipfiledokumentację , ale nie mogłem zrozumieć, jak rozpakować plik, tylko jak go skompresować. Jak rozpakować całą zawartość pliku zip do tego samego katalogu?
co jeśli zawartość archiwum .zip jest taka sama we wszystkich archiwach .zip? jak zmienić nazwę treści przed wypakowaniem? przykład: 1.zip 2.zip .. wszystkie zawierają content.txt: wypakuj wszystko jak 1content.txt 2content.txt?
iratzhash,
8
@iratzhash Zwykle tworzę nowy katalog tymczasowy dla zawartości za pomocą tempfile: docs.python.org/3/library/tempfile.html Rozpakowuję do katalogu tymczasowego i stamtąd przenoszę / organizuję pliki.
Dave Forgac,
8
@ 3kstc Chciałbym from zipfile import ZipFile. Podczas korzystania z niego nie trzeba już używać zipfile.ZipFilei można go używać ZipFile(zip_file_name).
Debugowanie 255
@iratzhash Zdaję sobie sprawę, że skomentowałeś 1,5 roku temu. Ale tak, aby inni wiedzieli, zwykle zawartość pliku zip jest tylko do odczytu. Dobrą odpowiedź jest tutaj przez „Bouke”
Debug255
Niby meta nuta, ale edycja z listopada 2018 r. Czyni tę prawie identyczną z inną odpowiedzią, która już używała menedżera kontekstu (i łączy z tym, co to oznacza).
Engineero
304
Jeśli używasz języka Python 3.2 lub nowszego:
import zipfile
with zipfile.ZipFile("file.zip","r")as zip_ref:
zip_ref.extractall("targetdir")
Nie musisz używać close ani próbować / catch z tym, ponieważ używa on
konstrukcji menedżera kontekstu .
Dziękujemy za uwagę @MylesHollowed Nie jest to jednak kopia zaakceptowanej odpowiedzi. Zgadzam się, że są do siebie podobni, ale różnią się. Wskazuje na to również twój komentarz, ponieważ zaakceptowany jest zdecydowanie lepszy dla ciebie niż mój. Gdyby to była kopia, byłaby taka sama ... Dla kogoś moja odpowiedź może być cenna, ponieważ być może jest bardziej czytelna i, jak zauważyłeś, importuje mniej kodu ... To z powodu tych różnic zdecydowałem się na odpowiedź dać alternatywę. Czy to nie dlatego możemy podać inne odpowiedzi po zaakceptowaniu jednej? Wszystkiego najlepszego
simhumileco
Co jest nie tak z tą odpowiedzią? Dlaczego ktoś dał jej punkt ujemny? W końcu jest to odpowiedź na pytanie i wyróżnia się prostotą w porównaniu z innymi odpowiedziami, co może być ważne dla niektórych osób, które szukają odpowiedzi. Czyż nie
simhumileco
1
@MylesHollowed import zipfile.ZipFilegeneruje ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packagew 3.6.5. Jestem otwarty na błąd operatora, ale nie wiem, co to jest.
MikeF
6
Spróbuj tego :
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()
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)
Nie zawiera sprawdzania poprawności pliku, jeśli nie jest skompresowany. Jeśli folder zawiera plik .zip, zakończy się niepowodzeniem.
Odpowiedzi:
To już wszystko!
źródło
from zipfile import ZipFile
. Podczas korzystania z niego nie trzeba już używaćzipfile.ZipFile
i można go używaćZipFile(zip_file_name)
.Jeśli używasz języka Python 3.2 lub nowszego:
Nie musisz używać close ani próbować / catch z tym, ponieważ używa on konstrukcji menedżera kontekstu .
źródło
zipfile
+pathlib
= wygrana. masz coś przeciwko, jeśli nieznacznie zaktualizuję twoją odpowiedź?Użyj tej
extractall
metody, jeśli używasz języka Python 2.6+źródło
Możesz także importować tylko
ZipFile
:Działa w Python 2 i Python 3 .
źródło
import zipfile.ZipFile
generujeModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a package
w 3.6.5. Jestem otwarty na błąd operatora, ale nie wiem, co to jest.Spróbuj tego :
ścieżka: rozpakuj ścieżkę pliku
źródło
Nie zawiera sprawdzania poprawności pliku, jeśli nie jest skompresowany. Jeśli folder zawiera plik .zip, zakończy się niepowodzeniem.
źródło