英文:
Test that a ZIP doesn't require zip64 support
问题
我想测试一些Python代码,用于创建动态选择zip32或zip64的zip文件,并且我想要断言在某些情况下它确实创建了有效的zip32文件,可以在不支持zip64的情况下打开它。
如何在Python中检查文件是否确实可以被不支持zip64的东西打开。Python的zipfile模块中的"allowZip64"选项似乎只用于写入,而不是阅读 https://docs.python.org/3/library/zipfile.html
(我宁愿不查看文件的字节 - 我想要一个更集成的样式测试,使用现有的库/软件来处理文件)
英文:
I'm looking to test some Python code makes zip files that dynamically chooses zip32 or zip64, and I would like to assert that in certain cases it really does create valid zip32 files by opening it in something that does not support zip64.
How can I check that a file really is openable by something that doesn't support zip64 in Python. The "allowZip64" option in Python's zipfile module seems to only be for writing, rather than reading https://docs.python.org/3/library/zipfile.html
(I would prefer to not peek at the bytes of the file - I would like a more integration style test that uses existing library/software to process the file)
答案1
得分: 1
可能只需获取经典的PKZIP 2.04g可执行文件的旧副本。它应该仍然可以运行。
或者,您可以安装一个在zipfile
中引入Zip64支持之前的Python版本2.5之前的版本。
英文:
Maybe just get an old copy of the classic PKZIP 2.04g executable. It should still run.
Or you can install a version of Python before 2.5, which is when Zip64 support in zipfile
was introduced.
答案2
得分: 0
我不确定这是否算作作弊,但就在几分钟前,Python库stream-unzip通过传递allow_zip64=False
来支持 禁用 zip64 支持。
https://github.com/uktrade/stream-unzip/pull/46
从其文档中修改的示例:
from stream_unzip import stream_unzip
import httpx
def zipped_chunks():
with httpx.stream('GET', 'https://www.example.com/my.zip') as r:
yield from r.iter_bytes(chunk_size=65536)
# 如果尝试打开Zip64文件,则会引发UnsupportedZip64Error
for name, size, chunks in stream_unzip(zipped_chunks(), allow_zip64=False):
for chunk in chunks:
pass
英文:
I'm not sure if this is somehow cheating, but as of a few minutes ago, the Python library stream-unzip supports disabling zip64 support by passing it allow_zip64=False
https://github.com/uktrade/stream-unzip/pull/46
Modifying an example from its docs:
from stream_unzip import stream_unzip
import httpx
def zipped_chunks():
with httpx.stream('GET', 'https://www.example.com/my.zip') as r:
yield from r.iter_bytes(chunk_size=65536)
# Will raise UnsupportedZip64Error if trying to open a Zip64 file
for name, size, chunks in stream_unzip(zipped_chunks(), allow_zip64=False):
for chunk in chunks:
pass
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论