【发布时间】:2014-01-31 07:06:43
【问题描述】:
从文档看来,可以使用原生 python 中的 zipfile 模块执行选择性文件提取和打开,http://docs.python.org/2/library/zipfile using
ZipFile.extract(member[, path[, pwd]])
从存档中提取一个成员到当前工作目录; member 必须是其全名或 ZipInfo 对象)。它的文件 尽可能准确地提取信息。路径指定一个 解压到不同的目录。 member 可以是文件名或 ZipInfo 对象。 pwd 是用于加密文件的密码。
我有一个这样的压缩文件foobar.zip:
foobar.zip\
\foo
\a.txt
\b.txt
\bar
\b.txt
\c.txt
我尝试从 .zip 文件的单个子目录中提取文件,但有时它什么也不打印:
import zipfile
with zipfile.ZipFile('foobar.zip','r') as inzipfile:
for infile in inzipfile.namelist():
if 'foo' in os.path.split(infile)[0]:
print inzipfile.open(infile,'r').read()
我已尝试提供我可能想要提取的选定文件的列表,但有时它也不会打印任何内容。
wanted = ['a.txt', 'b.txt']
import zipfile
with zipfile.ZipFile('foobar.zip','r') as inzipfile:
for infile in inzipfile.namelist():
if os.path.split(infile)[1] in wanted:
print inzipfile.open(infile,'r').read()
已编辑:
代码或我读取文件的方式没有任何问题。我认为我的 zipfile 有问题导致 schroedinbug 有时我的子目录文件无法打开,inzipfile.open(infile,'r').read() 返回 None。现在它会提取、打开并打印文件的内容。
知道如何在 python 代码中检查 .zip 文件中的所有文件是否可以使用上述选择性提取/打开方法打开?
我还能如何执行 zipfile 的选择性提取/打开? 有没有更 Pythonic 的方法?
【问题讨论】:
标签: python if-statement file-io zip zipfile