Я прочитал zipfileдокументацию , но не мог понять, как разархивировать файл, только как заархивировать файл. Как мне разархивировать все содержимое zip-файла в один и тот же каталог?
Что делать, если содержимое архива .zip одинаково во всех архивах .zip? как переименовать контент перед извлечением? пример: 1.zip 2.zip .. все содержат content.txt: извлечь все как 1content.txt 2content.txt?
иратжаш
8
@iratzhash Я обычно создаю новый временный каталог для содержимого, используя tempfile: docs.python.org/3/library/tempfile.html Я распаковываю во временный каталог и перемещаю / организую файлы оттуда.
Дэйв Форгак
8
@ 3kstc Я бы from zipfile import ZipFile. При его использовании вам больше не нужно использовать zipfile.ZipFile, и вы можете использовать ZipFile(zip_file_name).
Debug255
@iratzhash Я понимаю, что вы прокомментировали 1,5 года назад. Но другие знают, что обычно содержимое zip-файла доступно только для чтения. Хороший ответ здесь - "bouke"
Debug255
Вроде мета-заметки, но редактирование от ноября 2018 года делает это в значительной степени идентичным другому ответу, который уже использовал менеджер контекста (и ссылки на то, что это значит).
Engineero
304
Если вы используете Python 3.2 или более позднюю версию:
Спасибо за ваше внимание @MylesHollowed Однако это не копия принятого ответа. Я согласен, что они похожи друг на друга, но они разные. На это также указывает ваш комментарий, потому что принятый, безусловно, лучше для вас, чем мой. Если бы это была копия, это было бы то же самое ... Для кого-то мой ответ может быть ценным, потому что он, возможно, более читабелен и, как вы заметили, импортирует меньше кода ... Именно из-за этих различий я решил поставить свой ответ дать альтернативу. Разве не поэтому мы можем ставить другие ответы после их принятия? Всего наилучшего
simhumileco
Что не так с этим ответом? Почему кто-то дал ей отрицательный балл? В конце концов, это ответ на вопрос и отличается своей простотой по сравнению с другими ответами, что может быть важно для некоторых людей, которые ищут ответ. Не так ли?
simhumileco
1
@MylesHollowed import zipfile.ZipFileгенерирует ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packageв 3.6.5. Я открыт для того, чтобы быть ошибкой оператора с моей стороны, но я не знаю, что это такое.
MikeF
6
попробуй это :
import zipfiledef 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+'\\'+aprint x
abs_path.append(x)for f in abs_path:
zip=zipfile.ZipFile(f)
zip.extractall(zip_file_path)
Это не содержит проверки файла, если это не zip. Если папка содержит не ZIP-файл, это не удастся.
Ответы:
Вот и все!
источник
from zipfile import ZipFile
. При его использовании вам больше не нужно использоватьzipfile.ZipFile
, и вы можете использоватьZipFile(zip_file_name)
.Если вы используете Python 3.2 или более позднюю версию:
Вам не нужно использовать close или try / catch с этим, поскольку он использует конструкцию менеджера контекста .
источник
zipfile
+pathlib
= победа. возражаешь, если я немного обновлю твой ответ?Используйте
extractall
метод, если вы используете Python 2.6+источник
Вы также можете импортировать только
ZipFile
:Работает в Python 2 и Python 3 .
источник
import zipfile.ZipFile
генерируетModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a package
в 3.6.5. Я открыт для того, чтобы быть ошибкой оператора с моей стороны, но я не знаю, что это такое.попробуй это :
путь: распаковать путь к файлу
источник
Это не содержит проверки файла, если это не zip. Если папка содержит не ZIP-файл, это не удастся.
источник