python的zipfile.open_如何模拟ZipFile.open.打开在Python2.5中?

我想将一个文件从一个zip文件提取到一个特定的路径,忽略归档文件中的文件路径。这在Python2.6中非常简单(我的docstring比代码长)import shutil

import zipfile

def extract_from_zip(name, dest_path, zip_file):

"""Similar to zipfile.ZipFile.extract but extracts the file given by name

from the zip_file (instance of zipfile.ZipFile) to the given dest_path

*ignoring* the filename path given in the archive completely

instead of preserving it as extract does.

"""

dest_file = open(dest_path, 'wb')

archived_file = zip_file.open(name)

shutil.copyfileobj(archived_file, dest_file)

extract_from_zip('path/to/file.dat', 'output.txt', zipfile.ZipFile('test.zip', 'r'))

但是在Python2.5中,ZipFile.open方法不可用。我找不到stackoverflow的解决方案,但是this forum post有一个很好的解决方案,它利用^{}来查找zip中的正确点,并使用^{}从那里解压字节。不幸的是,ZipInfo.file_offset在python2.5中被删除了!在

因此,考虑到Python2.5中只有^{},我想我只需要解析并跳过头结构就可以自己获得文件偏移量。使用Wikipedia作为a reference(我知道),我想出了一个长得多而且不太优雅的解决方案。在

^{pr2}$

请注意,我是如何解包并读取给出额外字段长度的字段的,因为对ZipInfo.extra属性调用len会减少4个字节,从而导致偏移量计算错误。也许我遗漏了什么?在

有人能改进这个Python2.5的解决方案吗?在

编辑:我应该说,ChrisAdams建议的显而易见的解决方案dest_file.write(zip_file.read(name))

对于zip中包含的任何大小合理的文件,都将失败,MemoryError,因为它试图一次性将整个文件拖入内存。我有大文件,所以我需要将内容流式输出到磁盘。在

另外,升级Python是显而易见的解决方案,但它完全不在我的掌控之中,而且基本上是不可能的。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值