我试图使用 python 解压缩 7z 文件,但我似乎无法弄清楚。我想我可以在 python 3 中使用 lzma 模块,但我似乎无法弄清楚:
我认为它会像 zipfile 包一样工作:
import lzma
with lzma.open('data.7z') as f:
f.extractall(r"<output path>")
Run Code Online (Sandbox Code Playgroud)
但在阅读文件后,似乎没有。所以这是我的问题:如何使用标准包提取 7z 文件?我不想调用 subprocess 来使用 7-zip 解压缩文件,因为我不能保证用户安装了这个软件。
我搜索了互联网和堆栈 oerflow 并注意到所有答案几乎都回到使用子处理上,我想像瘟疫一样避免这种情况。
虽然在 stackoverflow 上也有类似的问题,但答案仍然取决于 7-zip 或 7zip SDK。我不想使用 7-zip sdk/exe 进行提取,因为这假设用户已安装该软件。
这是 7z 文件中的属性:
我必须经常搜索几个.7z(用LZMA压缩)文件.我没有足够的内存来同时解压缩或将存档更改为.gz.目前我解压缩一个,搜索我需要的东西,删除提取的内容,解压缩下一个.我想以与gzip相同的方式浏览档案:
f = gzip.open('archive.gz')
for i in f:
do stuff
Run Code Online (Sandbox Code Playgroud)
有一个模块/方法用.7z文件吗?
当我使用 ZIPCrypto 压缩时,这种方法起作用了。AES-256 失败了。请问如何解决这个问题?
我之前使用以下 Python 代码成功打开了使用 7-Zip 创建的受密码保护的 .zip 文件:
import zipfile
zip_file = zipfile.ZipFile('crack_me.zip')
output_verbose = 1 # increase that for long password list
with open('passwords.txt', 'rb') as password_list:
for index, line in enumerate(password_list):
try:
pwd = line.strip(b'\r\n')
zip_file.extractall(pwd=pwd)
except RuntimeError as e:
print(e)
if index % output_verbose == 0:
print('{}. The {} word not matched.'.format(index + 1, pwd))
else:
print('{}. Wow ! found the password: {}'.format(index + 1, pwd))
break
zip_file.close()
Run Code Online (Sandbox Code Playgroud)
然而,由于无法理解的原因,它在多次尝试中只成功了几次。大多数情况下,都会给出“不支持该压缩方法”的例外情况。
我尝试删除、重命名、重新创建 .zip 文件,但没有成功。它偶尔起作用对我来说毫无意义。
我尝试将问题简化如下:
import …
Run Code Online (Sandbox Code Playgroud)