python - 在 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 文件的一部分。
解决方案
不是答案/修复,但解决方法是将数据加载到内存中。
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 使用。
推荐阅读
- lua - lua:每周在特定日期重置数据
- javascript - 谷歌分析出站链接跟踪在 React 中不起作用
- vba - 删除VBA中空单元格的整行
- java - 带有所选项目图像的 ScrollPane 内的按钮
- python - Py4JJavaError 使用 pyspark ml 库时
- php - 使用随机组排序按组对关联数组进行排序
- php - 我应该使用带有 simplexml_load_file 和 file_get_contents 的代理吗?
- angular - 如何在 PrimeNG 6+ 中使用 JHipster 5+
- arrays - 使用 Dart 解析没有键的 JSON 数组
- machine-learning - 无法在 DialogFlow 上匹配没有空格的两个实体