使用 subprocess python library 使用 7zip 解压缩文件

Use subprocess python library to unzip a file using 7zip

我想使用 7zip 可执行文件解压 Python 文件。在 Perl 中,这非常简单:

$zip_exe_path = "C:\Dropbox\7-zip\7z.exe";
$logfile_path = "C:\Temp\zipped_file.7z";
system ("$zip_exe_path x $log_file_path -y");

我试过这个:

import subprocess
zip_exe_path = "C:\Dropbox\7-zip\7z.exe"
logfile_path = "C:\Temp\zipped_file.7z"
subprocess.call(['zip_exe_path','x','logfile_path','-y'])

当我这样做时,我得到这个错误:

FileNotFoundError: [WinError 2] The system cannot find the file specified

感谢您的帮助!

为什么不用python zip:

import zipfile

with zipfile.ZipFile(logfile_path, 'r') as z:
    z.extractall()

或使用子流程:

subprocess.call(['zip_exe_path','x','logfile_path','-y'], shell=True)

想通了:

import subprocess

subprocess.Popen(zip_exe+' x '+file+' -o'+output_loc,stdout=subprocess.PIPE)

错误是您传递的是 字符串 'zip_exe_path''logfile_path' 而不是这些变量的值。

import subprocess
zip_exe_path = "C:\Dropbox\7-zip\7z.exe"
logfile_path = "C:\Temp\zipped_file.7z"
subprocess.call([zip_exe_path, 'x', logfile_path, '-y'])

您当然可以使用 shell=True 将命令作为单个字符串传递,但 shell 不会添加任何值并且 incurs some overhead (and risk!)

这项工作对我来说就像一个魅力:)

首先,安装py7zr库:

pip install py7zr

用于提取 .7z 中的所有文件:

from py7zr import py7zr

with py7zr.SevenZipFile('7z file_location', mode='r') as z:
    z.extractall()

用于提取单个文件:

from py7zr import py7zr

with py7zr.SevenZipFile('7z file_location', mode='r') as z:
    z.extract(targets=['rootdir/filename'])