我想解压缩一个.7z文件.根据这个问题,我可以使用 lzma包来做到这一点.
我期待着类似的东西
import lzma
#...
with lzma.open('myFile.7z') as f:
f.extractall('.')
Run Code Online (Sandbox Code Playgroud)
要将文件解压缩到当前目录中,但似乎不存在这样的事情.尝试类似的东西
import lzma
#...
with lzma.open('myFile.7z') as f:
file_content = f.read()
print(file_content)
Run Code Online (Sandbox Code Playgroud)
确实屈服了_lzma.LZMAError: Input format not supported by decoder
.我该如何检查格式?我很惊讶,因为我认为7zip和.7z格式都是开源的,而python应该支持所有内容.
我看到很多答案,人们只是用子进程调用7zip可执行文件,但这不是我想做的.我正在寻找一个简单的python3解决方案.
Mar*_*cus 21
LZMA和7z是两种非常不同的野兽.
用最简单的术语来说,LZMA是一种无损压缩算法.这意味着,您向LZMA提供一些数据,它将压缩并为您提供输出.它没有文件,文件夹或如何存储它们的意义.
另一方面,7z是一种存档文件格式,这意味着7z是一个完整的包.你有几个文件和文件夹,将它提供给7z,它将整齐地压缩它们,并将它们存储在一个文件(存档)中.请注意,7z使用LZMA和其他算法的混合来压缩和存储其7z存档文件中的文件.
以下是维基百科对这两者的看法:
7z是一种压缩归档文件格式,支持多种不同的数据压缩,加密和预处理算法.
Lempel-Ziv-Markov链算法(LZMA)是用于执行无损数据压缩的算法.它一直在开发任一自1996年或1998年3,并在7-Zip的归档的7Z格式首次使用.
简而言之,您不能使用lzma来创建或提取7z文件.据我所知,除了以下内容之外,没有办法使用python提取7z文件:
import os
os.system( '7z x archive.7z -oPath/to/Name' )
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用 python 库py7zr,它支持 7zip 存档压缩、解压、加密、解密。https://github.com/miurahr/py7zr
import py7zr
with py7zr.SevenZipFile('sample.7z', mode='r') as z:
z.extractall()
Run Code Online (Sandbox Code Playgroud)
该解决方案的功劳归于Matt Dnv 的回答:
我无法使给出的答案发挥作用。大多数在 python 中解压 7z 文件的解决方案都使用 7zip,但我无法找到可以使用 curl 的可靠的便携式版本。
.7z
因此,这里有一个在 Anaconda 提示符 4.8.2 中在 python 3.6 环境中解压文件的解决方案。首先我必须安装 2 个软件包:
pip install pyunpack
pip install patool
Run Code Online (Sandbox Code Playgroud)
接下来,我能够将名为的 7zip 文件解压到名为:(也test.7z
位于与此example.py
脚本相同的目录中)的文件夹中,该文件output
位于与此example.py
脚本相同的目录中。解压文件的代码test.7z
可以是:
from pyunpack import Archive
Archive('test.7z').extractall('./output')
Run Code Online (Sandbox Code Playgroud)