我想解压缩一个.7z文件。根据这个question我可以使用
lzma包可以做到这一点。

我期待着类似的东西

import lzma
#...
with lzma.open('myFile.7z') as f:
    f.extractall('.')

要将文件解压缩到当前目录中,但似乎不存在这样的内容。进一步尝试类似
import lzma
#...
with lzma.open('myFile.7z') as f:
    file_content = f.read()
    print(file_content)

没有产生_lzma.LZMAError: Input format not supported by decoder。如何检查格式?我很惊讶,因为我认为7zip和.7z格式都是开源的,而python应该支持所有内容。

我看到了很多答案,人们只是用子进程调用7zip可执行文件,但这不是我想要的。我正在寻找一个简单的python3解决方案。

最佳答案

LZMA和7z是两种非常不同的野兽。
用最简单的术语来说,LZMA是lossless compression算法。这意味着,您向LZMA提供一些数据,它将进行压缩并提供输出。它没有文件,文件夹或如何存储它们的感觉。
另一方面,7z是archive file format,这意味着7z是一个完整的软件包。您有一些文件和文件夹,将其提供给7z,它将整齐地压缩它们,并将其存储在单个文件中(存档)。请注意,7z使用LZMA和其他算法组合来压缩文件并将其存储在7z存档文件中。
维基百科对这两个说法是这样的:

简而言之,您不能使用lzma创建或提取7z文件。据我所知,除了使用Python之外,没有其他方法可以提取7z文件:请参阅下面的更新。

import os
os.system( '7z x archive.7z -oPath/to/Name' )
更新:2019年5月
由于有一些关于在python中提取7z文件的兴趣,因此我认为应该进行更新。从2019年开始(可能更早),用于python的libarchive bindings确实支持7z格式。上面的链接中提供了一个从7z存档中提取文件的示例。

关于python-3.x - Python3:lzma解压缩.7z文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31743127/

10-12 17:02