解压后获取解压文件名

2024-03-29 08:56:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将从zip中提取的文件的名称指定为可以传递的字符串。你知道吗

以下是我目前的代码:

cl = '7z x -ppassowrd Week45_10.zip'
args = shlex.split(cl)
p = subprocess.call(args)
file = open('VENDATA_10', 'r')

VENDATA_10是提取的文件名,但是,从zip提取的文件名会有所不同。如何找到提取文件的名称,以便打开该文件而不是VENDATA\u10?你知道吗


Tags: 文件字符串代码名称cl文件名argszip
1条回答
网友
1楼 · 发布于 2024-03-29 08:56:11

您可以捕获流程的输出。7z将把它提取的文件名打印到标准输出中。输出可能如下所示:

7-Zip 4.44 beta  Copyright (c) 1999-2007 Igor Pavlov  2007-01-20
p7zip Version 4.44 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)

Processing archive: Week45_10.zip

Extracting  VENDATA_10

Everything is Ok

所以你想捕捉以“提取”开头的行。要捕获输出,您需要将进程的输出导入程序并读取它。您可以使用来自subprocesscommunicate()来获得完整的输出。你知道吗

我对您的代码进行了一些扩展:

from subprocess import Popen, PIPE
import shlex

cl = '7z x -ppassowrd Week45_10.zip'
args = shlex.split(cl)
p = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
(stdoutdata, stderrdata) = p.communicate()

START_WITH = "Extracting  "
N = len(START_WITH)
lines = [line.strip() for line in stdoutdata.split('\n')]
files = [line[N:] for line in lines if line.startswith(START_WITH)]

print files

您应该知道,如果文件已经存在,可能会出现问题,因为7z将提示用户是否应该覆盖文件。如果您想处理这个问题,那么还需要控制7z进程的输入。为此,您可能需要查看pexpect模块。你知道吗

相关问题 更多 >