недавно начал изучать python и возникла проблема.... Мне нужно разархивировать файл rar, который защищен паролем, но пароль прописан в имени файла, который в архиве. И так ~300 раз. Как, чем и где это можно реализовать? Например, есть архив 383442389.rar, в нем два файла, pass-1337643656.data (имя содержит пароль архива) и следующий архив)
Автоматическая распаковка защищенных паролем rar-файлов в python
Ответы (1)
Я не уверен во всем контексте вашего вопроса, но я постараюсь ответить вам.
Вы сказали, что вам нужно разархивировать файл .rar, но это невозможно, если файл .rar, вам нужно разархивировать
Если вам нужно просто разархивировать .zip
что-то вроде этого должно работать
from zipfile import ZipFile
with ZipFile('test1.zip', 'r') as myzip:
myzip.extractall(pwd='<password>')
- В случае .rar
pip install rarfile (устанавливается только в python 3)
from rarfile import RarFile
with RarFile('test2.rar', 'r') as myrar:
myrar.extractall(pwd='<password>')
- you mention that the password comes in the .rar like a name of file
- pass-1337643656.data
- вы можете перечислить имена файлов, используя
RarFile.namelist() Возвращает список членов архива по имени.
Таким образом, вы можете извлечь пароль, используя split
s = 'pass-1337643656.data'
s.split('-')[1].split('.')[0]
print(s)
'1337643656'
вы также можете использовать регулярное выражение для извлечения этого
Заключение.
Полное решение с использованием .rar может быть
from rarfile import RarFile
with RarFile('test2.rar', 'r') as myrar:
file_names = myrar.namelist()
pass_file = list(filter(lambda k: 'pass' in k, l))[0]
pass = pass_file.split('-')[1].split('.')[0]
myrar.extractall(pwd=pass)
Справочник.
- https://python-unrar.readthedocs.io/en/v0.3/rarfile.html
- https://www.w3schools.com/python/ref_string_split.asp
- Фильтрация списка строк на основе содержимого
- https://docs.python.org/2/library/zipfile.html
- Распаковка файлов в Python
person
Cyberguille
schedule
17.05.2020
Привет! Да, я немного ошибся со словами, нужен чехол с .rar. При этом мне еще нужно сделать выполнение кода до 300 раз (чтобы в C:\Users\Usero\Desktop появился только конечный результат). Все-таки как указать путь к test2.rar? Вот пример такого rar-файла, можете посмотреть по ссылке: myfile.is/h0325b00o8/Enclosed_rar (Также при компиляции возникает ошибка: Syntax error in C:\Users\Usero\script.py File C:\Users\script.py, строка 5 pass=pass_file..split('-')[1 ] .split ('.') [0] ^ SyntaxError: неверный синтаксис
- person Igor Bezrodnyy; 18.05.2020
@IgorBezrodnyy Я устанавливаю путь относительно текущей папки, где у меня есть мой скрипт, в этой строке с
RarFile('test2.rar', 'r') as myrar:``, I you read the referece that I let you regarding to rarfile you can see the specification of the constructor of the object
RarFile, as you can see here
rarfile.RarFile(file[, mode='r'])```, где file должен быть путем к файлу
- person Cyberguille; 18.05.2020
По поводу синтаксической ошибки в сообщении видно 2 ненужных пункта
pass_file..split ('-') [1] .split ('.') [0]
, возможно ошибка копирования и вставки, т.к. в ответе я не увидел этой ошибки, должно быть pass_file.split ('-') [1] .split ('.') [0]
- person Cyberguille; 18.05.2020
@IgorBezrodnyy Идея stackoverflow не в том, чтобы решить всю вашу проблему, просто уточнить что-то более конкретно, что, возможно, вы не знаете или странно, я знаю, что вы новый пользователь stackoverflow, я думаю, что вам нужно перепроверить эта страница stackoverflow.com/tour
- person Cyberguille; 18.05.2020
Это идеальный способ решить мою проблему!
- person blueman010112; 16.06.2021