Python 使用zipfile.is_zipfile在嵌入拉链的拉链上

Python 使用zipfile.is_zipfile在嵌入拉链的拉链上,python,zipfile,Python,Zipfile,文件上的_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 i

文件上的_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文件的一部分。

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

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.Isu zipfile使用。

不确定处理是什么意思。zipfile.is_zipfile根据文档检查幻数是否为zip文件,因此您的文件可能在这方面有所不同。也许你可以用不同的方式来解释你真正想要实现的目标。你是否可以用“rb”将内部文件作为二进制文件打开,并测试它们是否是(二进制)zipfile?@user3732793
zipfile.is_zipfile(file)
=true如果
file=open('test.xlsx',rb')
<如果
file=zipfile.open('test.xlsx','r')
,则code>zipfile.is_zipfile(file)=false。test.xslx在这两种情况下都是相同的数据。我希望第二个响应的计算结果与第一个响应的计算结果相同。@9769953 zipfile.open不能接受“rb”,它唯一的选项是“r”和“w”。我已经简化了示例。希望现在更清楚。