Я прочитал zipfile
документацию, но не понял, как распаковать файл, только как заархивировать файл. Как распаковать все содержимое zip-файла в один и тот же каталог?
Распаковка файлов в Python
Ответы (9)
import zipfile
with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref:
zip_ref.extractall(directory_to_extract_to)
Вот и все!
from zipfile import ZipFile
. При его использовании вам больше не нужно использовать zipfile.ZipFile
, и вы можете использовать ZipFile(zip_file_name)
.
- person Debug255; 13.02.2018
from tempfile import mkdtemp; directory_to_extract_to = mkdtemp()
- person Martin Thoma; 31.07.2019
Если вы используете Python 3.2 или новее:
import zipfile
with zipfile.ZipFile("file.zip","r") as zip_ref:
zip_ref.extractall("targetdir")
Вам не нужно использовать close или try / catch с этим, поскольку он использует контекстный менеджер.
zipfile
+ pathlib
= победа. не возражаете, если я немного обновлю ваш ответ?
- person Umar.H; 21.01.2020
os.system(f'tar -xvzf {filename}')
и вместо этого использовать zip-файл (например, zip = ZipFile('file.zip'); zip.extractall() )
или shutil.unpack_archive(filename, extract_dir)
?
- person Charlie Parker; 21.01.2021
system
вызовы зависят от ОС. Например, tar
не будет доступен в Windows.
- person Fareanor; 18.05.2021
Используйте метод extractall
, если вы используете Python 2.6+
zip = ZipFile('file.zip')
zip.extractall()
zip.close()
в конце, если вы не используете инструкцию with
, как предлагают другие ответы.
- person Boris; 22.06.2020
zipfile
- это библиотека низкого уровня. Если вам не нужна конкретная информация, которую он предоставляет, вы можете обойтись с помощью shutil
функции более высокого уровня make_archive
и _ 4_.
make_archive
уже описан в этом ответе. Что касается unpack_archive
:
import shutil
shutil.unpack_archive(filename, extract_dir)
unpack_archive
автоматически определяет формат сжатия по расширению filename
(.zip
, .tar.gz
и т. Д.), Как и make_archive
. Кроме того, filename
и extract_dir
могут быть любыми подобными пути объектами (например, pathlib.Path), начиная с Python 3.7.
.omt
для пакетов проектов OmegaT). Это дает raise ReadError("Unknown archive format '{0}'".format(filename))
.
- person msoutopico; 04.03.2021
shutil.unpack_archive(filename, extract_dir, format)
- person fonini; 04.03.2021
Вы также можете импортировать только ZipFile
:
from zipfile import ZipFile
zf = ZipFile('path_to_file/file.zip', 'r')
zf.extractall('path_to_extract_folder')
zf.close()
Работает в Python 2 и Python 3.
import zipfile.ZipFile
генерирует ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a package
в 3.6.5. Я открыт, что это ошибка оператора с моей стороны, но я не знаю, что это такое.
- person MikeF; 26.02.2020
from zipfile import ZipFile
. Надеюсь это поможет.
- person Ben Dalling; 15.10.2020
попробуйте это:
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()
path: путь к распакованному файлу
from zipfile import ZipFile
ZipFile("YOURZIP.zip").extractall("YOUR_DESTINATION_DIRECTORY")
Каталог, в который вы будете извлекать файлы, не обязательно должен существовать раньше, вы называете его сейчас
YOURZIP.zip - это имя zip-архива, если ваш проект находится в том же каталоге. Если нет, используйте ПУТЬ, то есть: C: //....//YOURZIP.zip.
Подумайте, чтобы избежать /
другим /
в PATH. Если у вас есть permission denied
, попробуйте запустить свой ide (например, Anaconda) от имени администратора
YOUR_DESTINATION_DIRECTORY будет создан в том же каталоге, что и ваш проект.
Если вы хотите сделать это в оболочке, а не писать код.
python3 -m zipfile -e myfiles.zip myfiles/
myfiles.zip
- это zip-архив, а myfiles
- путь для извлечения файлов.
tar -xvzf path_file
в вашем случае?
- person Charlie Parker; 21.01.2021
tar
, которая обрабатывает ZIP-архивы, ваша команда вообще не будет работать. tar
с параметром -z
обрабатывает сжатые архивы tar (обычно файлы с расширениями .tgz
или .tar.gz
)
- person Perry; 22.01.2021
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. Если в папке есть файл, отличный от .zip, произойдет сбой.
shutil.unpack_archive()
. - person phoenix   schedule 23.12.2020