首页 > 解决方案 > 在 zip 中嵌入的 zip 上使用 zipfile.is_zipfile

问题描述

文件上的 is_zipfile 正确识别 zip 文件。但是在处理 zipfile.open 生成的类似文件的对象时,它不会。有没有办法让它工作,或者我必须在使用前将文件提取到一个临时位置?

import zipfile

file = open(r'c:\temp\test.xlsx', 'rb')
if zipfile.is_zipfile(file): # only works with native files, not file-like
    print('Zip') # this line is executed, as expected
else:
    print('Not zip')

zip = zipfile.ZipFile(open(r'c:\temp\test.zip', 'rb'))
file = zip.open('test.xlsx', 'r')
if zipfile.is_zipfile(file): # only works with native files, not file-like
    print('Zip')
else:
    print('Not zip') # this line is executed. WHY?

我的输出是:

Zip
Not zip

我的预期结果是两者都应该作为 zip 文件进行测试。它适用于本机文件,但不能作为 zip 文件的一部分。

标签: pythonzipfile

解决方案


不是答案/修复,但解决方法是将数据加载到内存中。

zip = zipfile.ZipFile(open(r'c:\temp\test.zip', 'rb'))
file = zip.open('test.xlsx', 'r')
data = file.read()
if zipfile.is_zipfile(StringIO.StringIO(data)):
    print('Zip')
else:
    print('Not zip')

zipfile.open 生成的类文件似乎不足以让 zipfile.is_zipfile 使用。


推荐阅读