python-3.x - Python3 : lzma unpack . 7z 文件

标签 python-3.x 7zip

我想解压一个 .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 存档文件中压缩和存储文件。
以下是维基百科对这两者的看法:

7z is a compressed archive file format that supports several different data compression, encryption and pre-processing algorithms.

The Lempel–Ziv–Markov chain algorithm (LZMA) is an algorithm used to perform lossless data compression. It has been under development either since 1996 or 19983 and was first used in the 7z format of the 7-Zip archiver.


简而言之,您不能使用 lzma 来创建或提取 7z 文件。据我所知,除了以下内容之外,无法使用 python 提取 7z 文件:请参阅下面的更新。
import os
os.system( '7z x archive.7z -oPath/to/Name' )
更新:2019 年 5 月
因为有一些关于提取 7z 的兴趣python中的文件,我认为更新是有序的。截至 2019 年(也许更早),libarchive bindings对于 python 做支持 7z格式。从 7z 存档中提取文件的示例在上面的链接中给出。

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

相关文章:

python - 如何使用 Pandas 中另一个数据框的值更新一个数据框

python-3.x - 如何从python3中的同级目录导入?

powershell - 如何使用 7zip powershell 包含文件和文件夹

azure - 在 Azure 自动化中解压缩 .7z 文件

python - pip 看不到设置工具

Python通过对值求和将字典的字典合并为一个字典

python-3.x - Python 从颜色名称到 RGB

java - 流式传输 7-zip 存档中的文件

delphi - Delphi 中的 LZMA 或 7zip

zip - Zip格式的JPG+Zip文件组合问题