Как распаковать архив?
Функция принимает путь к папке с архивами и должна распаковывать в эту же папку с таким же названием. Например был архив с именем archive.zip -> распаковалось в папку archive. Но почему-то не работает, никаких действий не происходит при запуске этой функции.
def unpack_archives(path_to_archives): for archive in path_to_archives.rglob('*'): shutil.unpack_archive(archive, archive.name)
Отслеживать
задан 17 янв в 6:03
196 11 11 бронзовых знаков
1) исправьте отступы 2) как вы вызываете unpack_archives , путь передаёте относительный или абсолютный, если относительный, то знаете ли вы из какой каталог на самом деле текущий у вашего скрипта
17 янв в 7:02
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- python
- файлы
- ziparchive
- shutil
Как разархивировать архив python
Zip представляет наиболее популярный формат архивации и сжатия файлов. И язык Python имеет встроенный модуль для работы с ними — zipfile . С помощью этого модуля можно создавать, считывать, записывать zip-файлы, получать их содержимое и добавлять в них файлы. Также поддерживается шифрование, но не поддерживается дешифрование.
Для представления zip-файла в этом модуле определен класс ZipFile . Он имеет следующий конструктор:
ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True, metadata_encoding=None)
- file : путь к zip-файлу
- mode : режим открытия файла. Может принимать следующие значения:
- r : применяется для чтения существующего файла
- w : применяется для записи нового файла
- a : применяется для добавления в файл
- ZIP_STORED : архивация без сжатия (значение по умолчанию)
- ZIP_DEFLATED : стандартный тип сжатия при архивации в zip
- ZIP_BZIP2 : сжатие с помощью способа BZIP2
- ZIP_LZMA : сжатие с помощью способа LZMA
Для работы с файлами этот класс предоставляет ряд методов:
- close() : закрывает zip-файл
- getinfo() : возвращает информацию об одном файле из архива в виде объекта ZipInfo
- namelist() : возвращает список файлов архива
- infolist() : возвращает информацию обо всех файлах из архива в виде списока объектов ZipInfo
- open() : предоставляет доступ к одному из файлов в архиве
- read() : считывает файл из архива в набор байтов
- extract() : извлекает из архива один файл
- extractall() : извлекает все элементы из архива
- setpassword() : устанавливает пароль для zip-файла
- printdir() : выводит на консоль содержимое архива
Создание и закрытие файла
Для создания архивного файла в конструктор ZipFile передается режим «w» или «a»:
from zipfile import ZipFile myzip = ZipFile("metanit.zip", "w")После выполнения кода в текущей папке будет создаваться пустой архивный файл «metanit.zip».
После окончания работы с архивом для его закрытия применяется метод close() :
from zipfile import ZipFile myzip = ZipFile("metanit.zip", "w") myzip.close()Но так как ZipFile также представляет менеджер контекста, то он поддерживает выражение with , которое определяет контекст и автоматически закрывает файл по завершению контекста:
from zipfile import ZipFile with ZipFile("metanit.zip", "w") as myzip: passЗапись файлов в архив
Для записи файлов в архив применяется файл write() :
write(filename, arcname=None, compress_type=None, compresslevel=None)
Первый параметр представляет файл, который записиывается в архив. Второй параметр — arcname устанавливает произвольное имя для файла внутри архива (по умолчанию это само имя файла). Третий параметр — compress_type представляет тип сжатия, а параметр compresslevel — уровень сжатия.
Например, запишем в архив «metanit.zip» файл «hello.txt» (который, как предполагается, находится в той же папке, где и текущий скрипт python):
from zipfile import ZipFile with ZipFile("metanit.zip", "w") as myzip: myzip.write("hello.txt")Стоит учитывать, что при открытии файла в режиме «w» при всех последующих записях текущее содержимое будет затираться, то есть фактически архивный файл будет создаваться заново. Если нам необходимо добавить, то необходимо определять zip-файл в режиме «a»:
from zipfile import ZipFile with ZipFile("metanit.zip", "a") as myzip: myzip.write("hello2.txt") myzip.write("forest.jpg")Стоит отметить, что по умолчанию сжатие не применяется. Но при необходимости можно применить какой-нибудь способ сжатия и уровень сжатия»
from zipfile import ZipFile, ZIP_DEFLATED with ZipFile("metanit.zip", "w", compression=ZIP_DEFLATED, compresslevel=3) as myzip: myzip.write("hello.txt")Необходимо учитывать, что если мы попробуем добавить в архив файлы с уже имеющимися именами, то консоль выведет предупреждение. Чтобы избежать наличия файлов с дублирующимися именами можно через второй папаметр метода write явным образом определить для них уникальное имя внутри архива:
from zipfile import ZipFile with ZipFile("metanit.zip", "a") as myzip: myzip.write("hello.txt", "hello1.txt") myzip.write("hello.txt", "hello2.txt") myzip.write("hello.txt", "hello3.txt")Получение информации о файлах в архиве
Метод infolist() возвращает информацию о файлах в архиве с виде списка, где каждый отдельный файл представлен объектом ZipInfo:
from zipfile import ZipFile with ZipFile("metanit.zip", "a") as myzip: print(myzip.infolist())Класс ZipInfo предоставляет ряд атрибутов для хранения информации о файле. Основные из них:
- filename : название файла
- date_time : дата и время последнего изменения файла в виде кортежа в формате (год, месяц, день, час, минута, секунда)
- compress_type : тип сжатия
- compress_size : размер после сжатия
- file_size : оригинальный размер файла до сжатия
Получим эти данные по каждому отдельному файлу в архиве:
from zipfile import ZipFile with ZipFile("metanit.zip", "r") as myzip: for item in myzip.infolist(): print(f"File Name: Date: Size: ")Примерный консольный вывод:
File Name: hello.txt Date: (2022, 11, 23, 20, 21, 34) Size: 18 File Name: forest.jpg Date: (2022, 11, 19, 20, 46, 52) Size: 103956 File Name: hello1.txt Date: (2022, 11, 23, 20, 21, 34) Size: 18 File Name: hello2.txt Date: (2022, 11, 23, 20, 21, 34) Size: 18 File Name: hello3.txt Date: (2022, 11, 23, 20, 21, 34) Size: 18
С помощью метода is_dir() можно проверить, является ли элемент в архиве папкой:
from zipfile import ZipFile with ZipFile("metanit.zip", "r") as myzip: for item in myzip.infolist(): if(item.is_dir()): print(f"Папка: ") else: print(f"Файл: ")Если надо получить только список имен входящих в архив файлов, то применяется метод namelist() :
from zipfile import ZipFile with ZipFile("metanit.zip", "r") as myzip: for item in myzip.namelist(): print(item)Консольный вывод в моем случае:
hello.txt forest.jpg hello1.txt hello2.txt hello3.txt
С помощью метода getinfo() можно получить данные по одному из архивированных файлов, передав в метод его имя в архиве. Результат метода — объект ZipInfo:
from zipfile import ZipFile with ZipFile("metanit.zip", "r") as myzip: try: hello_file = myzip.getinfo("hello.txt") print(hello_file.file_size) except KeyError: print("Указанный файл отсутствует")Если в архиве не окажется элемента с указанным именем, то метод сгенерирует ошибку KeyError.
Извлечение файлов из архива
Для извлечения всех файлов из архива применяется метод extractall() :
extractall(path=None, members=None, pwd=None)
Первый параметр метода устанавливает каталог для извлечения архива (по умолчанию извлечение идет в текущий каталог). Параметр members представляет список строк — список названий файлов, которые надо извлечт из архива. И третий параметр — pwd представляет пароль, в случае если архив закрыт паролем.
Например, извлечем все файлы из архива:
from zipfile import ZipFile with ZipFile("metanit.zip", "r") as myzip: myzip.extractall()Извлечение в определенную папку:
myzip.extractall(path="metanit")
Извлечение части файлов:
# извлекаем файлы "hello.txt", "forest.jpg" в папку "metanit2" myzip.extractall(path="metanit2", members=["hello.txt", "forest.jpg"])
Для извлечения одного файла применяется метод extract() , в который в качестве обязательного параметра передается имя извлекаемого файла:
myzip.extract("hello.txt")Считывание файла
Метод read() позволяет считать содержимое файла из архива в набор байтов:
from zipfile import ZipFile with ZipFile("metanit.zip", "r") as myzip: content = myzip.read("hello5.txt") print(content)Открытие файла
Метод open() позволяет открывать отдельные файлы из архива без непосредственного их извлечения:
open(name, mode='r', pwd=None, *, force_zip64=False)
В качестве первого обязательного параметра передается имя файла внутри архива. Второй параметр — mode устанавливает режим открытия. Параметр pwd задает пароль, если файл защищен паролем. И параметр force_zip64 при значении True позволяет открывать файлы больше 4 Гб.
Этот файл может быть полезен для манипулирования файлом, например, для считывания его содержимого или, наоборот, для записи в него. Например, откроем файл и считаем его содержимое:
from zipfile import ZipFile with ZipFile("metanit.zip", "a") as myzip: # записываем в архив новый файл "hello5.txt" with myzip.open("hello5.txt", "w") as hello_file: encoded_str = bytes("Python. ", "UTF-8") hello_file.write(encoded_str)Распаковка файлов из архивов zip или tar.gz с помощью Python

Из этой статьи вы узнаете, как распаковать один или несколько архивов zip и tar.gz и получить информацию о них средствами языка Python. Мы рассмотрим извлечение одного или нескольких файлов из архива.
Шаг 1: получить информацию из архива zip или tar.gz
Сперва мы просмотрим содержимое zip-файла с помощью этого фрагмента кода:
from zipfile import ZipFile zipfile = 'file.zip' z = ZipFile(zipfile) z.infolist()
Таким образом мы сможем узнать размеры и имена двух файлов:
- pandas-dataframe-background-color-based-condition-value-python.png
- text1.txt
Шаг 2: перечислить и прочитать все файлы из архива
Теперь мы можем получить список всех файлов в архиве:
from zipfile import ZipFile archive = 'file.zip' zip_file = ZipFile(archive) [text_file.filename for text_file in zip_file.infolist() ]
['pandas-dataframe-background-color-based-condition-value-python.png', 'text1.txt']
Если вам нужно отсортировать файлы – например, получить только json – или прочитать их в формате датафреймов Pandas, можно сделать это следующим образом:
from zipfile import ZipFile archive = 'file.zip' zip_file = ZipFile(archive) dfs = dfs
Шаг 3: извлечь файлы из zip-архива
Пакет zipfile можно использовать для извлечения файлов из zip-архивов. Базовый пример:
import zipfile archive = 'file.zip' with zipfile.ZipFile(archive, 'r') as zip_file: zip_file.extractall(directory_to_extract_to)
Шаг 4: извлечь файлы из tar/tar.gz
Чтобы извлечь файлы из архивов tar/tar.gz , можно воспользоваться кодом, приведенным ниже. Он использует модуль tarfile и разделяет эти два типа, чтобы применить подходящий режим распаковки:
import tarfile zipfile = 'file.zip' if zipfile.endswith("tar.gz"): tar = tarfile.open(zipfile, "r:gz") elif zipfile.endswith("tar"): tar = tarfile.open(zipfile, "r:") tar.extractall() tar.close()Примечание: все файлы из архива будут распакованы в текущей для данного скрипта рабочей директории.
Шаг 5: извлечь один файл из архива
Если вам нужно получить только один файл из архива, можно использовать метод zipObject.extract(fileName, ‘temp_py’) . Простой пример:
import zipfile archive = 'file.zip' with zipfile.ZipFile(archive, 'r') as zip_file: zip_file.extract('text1.txt', '.')В этом примере мы извлечём файл ‘text1.txt’ в текущую рабочую директорию. Если вам нужно извлечь файл в другую директорию, можете изменить второй параметр — ‘.’
Заключение
В этом уроке мы выяснили, как с помощью Python извлечь один или несколько файлов из различных архивов, а также — как вывести список запакованных файлов и получить из них информацию. Мы затронули работу с двумя пакетами: zipfile и tarfile.
Разархивируйте или извлеките файлы RAR в Python

Сжатие и архивирование файлов — фундаментальные задачи в мире вычислений, позволяющие сэкономить место для хранения и сделать передачу данных более управляемой. Распространенным форматом сжатия файлов является RAR(Архив Рошаля), который известен своей высокой степенью сжатия и универсальностью. В этом сообщении блога мы рассмотрим, как извлекать архивы RAR в Python с помощью мощной библиотеки RAR, которая упрощает работу с различными форматами архивов.
- Библиотека экстрактора Python RAR
- Разархивируйте RAR-архив в Python
- Разархивируйте один файл в архиве RAR
- Извлечение зашифрованного архива RAR в Python
- Извлечение зашифрованного архива RAR
- Извлеките зашифрованную запись RAR
Библиотека экстрактора Python RAR#
Aspose.ZIP for Python — это надежная и многофункциональная библиотека, разработанная для автоматизации задач сжатия и архивирования файлов в приложениях Python. Aspose.ZIP упрощает работу со сжатыми архивными файлами, включая популярные форматы, такие как ZIP, RAR, 7z и другие. Используя библиотеку, вы можете легко извлечь файлы RAR за несколько строк кода.
Вы можете либо скачать библиотеку, либо установить ее из PyPI.
> pip install aspose-zipРазархивируйте RAR-архив в Python#
Aspose.ZIP for Python упростил процесс извлечения файлов из архивов RAR. Просто загрузите архив RAR и распакуйте его в нужную папку. Давайте посмотрим на шаги, необходимые для распаковки архива RAR в Python.
- Сначала загрузите файл RAR, используя класс RarArchive.
- Затем вызовите метод RarArchive.extracttodirectory(foldername), чтобы извлечь файлы из архива.
В следующем примере кода показано, как извлечь архив RAR в Python.
import aspose.zip as az # Загрузить RAR-архив with az.rar.RarArchive("archive.rar") as archive: # Извлечь файл RAR archive.extract_to_directory("extracted_rar")Разархивируйте один файл в архиве RAR#
Вместо извлечения всех записей в архиве RAR вы можете извлечь только нужные файлы/записи. Для этого вы можете получить доступ к записи, используя ее индекс. Ниже приведены шаги по извлечению определенного файла из архива RAR в Python.
- Сначала загрузите файл RAR, используя класс RarArchive.
- Затем извлеките файл, используя метод RarArchive.entries[index].extract(filename).
В следующем примере кода показано, как извлечь нужную запись файла из архива RAR.
import aspose.zip as az # Загрузить RAR-архив with az.rar.RarArchive("archive.rar") as archive: # Извлеките нужные записи файла archive.entries[0].extract("extracted_file.txt")Извлеките зашифрованный архив RAR в Python#
Могут быть случаи, когда вы получаете зашифрованный архив RAR или архив с зашифрованными записями, защищенными паролем. В таких случаях вам необходимо указать пароль при извлечении файлов RAR.
Извлечение зашифрованного архива RAR#
Чтобы разархивировать зашифрованный архив RAR, укажите пароль в качестве второго параметра метода RarArchive.extracttodirectory(foldername, pass).
Следующий фрагмент кода демонстрирует, как разархивировать зашифрованный архив RAR в Python.
import aspose.zip as az # Загрузить RAR-архив with az.rar.RarArchive("archive.rar") as archive: # Извлечь зашифрованный файл RAR archive.extract_to_directory("extracted_rar", "password")Извлеките зашифрованную запись RAR#
Чтобы извлечь один файл, зашифрованный паролем, вы можете указать пароль в качестве второго параметра метода RarArchive.entries[index].extract(имя файла, пароль).
В следующем примере кода показано, как извлечь зашифрованную запись RAR в Python.
import aspose.zip as az # Загрузить RAR-архив with az.rar.RarArchive("archive.rar") as archive: # Извлеките нужную запись файла archive.entries[0].extract("extracted_encrypted_file.txt", "password")Получите бесплатную лицензию#
Вы можете получить бесплатную временную лицензию и извлекать архивы RAR без каких-либо ограничений по ознакомлению.
Библиотека Python RAR — Ресурсы#
Вы можете узнать больше о нашей библиотеке Python RAR, используя следующие ресурсы:
Извлечение архивов RAR онлайн#
Вы также можете использовать наше бесплатное онлайн-приложение для извлечения архивов RAR, созданное на базе Aspose.ZIP for Python.
Заключение#
В этом сообщении блога мы обсудили извлечение архивов RAR в Python различными способами. Пошаговые инструкции и примеры кода продемонстрировали, как извлечь архивы RAR, распаковать одну запись RAR или извлечь зашифрованные архивы RAR в Python. Используя нашу мощную библиотеку экстракторов RAR, вы можете легко извлекать содержимое файлов RAR, делая обработку и анализ данных более доступными и эффективными.
Смотрите также#
- Восстановление пароля RAR онлайн
- Разблокировать архивы RAR онлайн
- Aspose.ZIP Product Family
- unrar archive in python
- Unrar files
- python rar extractor
- rar file opener
- python rar opener
- unrar in python