从嵌套ZIP文件存档打开的文件。
zip_open的Python项目详细描述
zip打开从嵌套的zip文件存档打开文件。
如果将静态文件(如“data.zip”)用作 python代码,您的程序将变成 open(os.path.join(os.path.dirname(__file__), 'data.zip'))。 但是如果你的包裹被打包成packages.zip文件(压缩的鸡蛋, 或者在谷歌应用程序引擎上收集一个文件的案例 代码不能正常工作。
在这种情况下,data.zip的文件路径变成 /path/to/packages.zip/data.zip,则程序无法打开 data.zip文件。
zip_open包解决了这个问题。
功能
- 从嵌套的ZIP存档文件路径/名称打开文件。
- 从嵌套的ZIP存档文件类对象中打开文件。
使用sample1:从zip文件打开文件
packages1.zip是:
packages1.zip + file1.txt
打开file1.txt:
>>> from zip_open import zopen >>> fobj = zopen('packages1.zip/file1.txt') >>> data = fobj.read() >>> print(data) I am file1.txt, ok.
您可以指定zopen子路径参数:
>>> fobj = zopen('packages1.zip', 'file1.txt') >>> print(fobj.read()) I am file1.txt, ok.
这些代码示例相当于以下代码:
>>> from zipfile import ZipFile >>> zipobj = ZipFile('packages1.zip') >>> data = zipobj.read('file1.txt') >>> print(data) I am file1.txt, ok.
使用sample2:从嵌套的zip文件打开文件
packages2.zip是:
packages2.zip + data2.zip + file2.txt
打开file2.txt:
>>> from zip_open import zopen >>> fobj = zopen('packages2.zip/data2.zip/file2.txt') >>> print(fobj.read()) I am file2.txt, ok.
如果要从类文件对象打开,可以调用:
>>> zip_fileobj = open('packages2.zip', 'rb') >>> fobj = zopen(zip_fileobj, 'data2.zip/file2.txt') >>> print(fobj.read()) I am file2.txt, ok.
然后您还可以拨打电话:
>>> from StringIO import StringIO >>> zip_payload = open('packages2.zip', 'rb').read() >>> zip_fileobj = StringIO(zip_payload) >>> fobj = zopen(zip_fileobj, 'data2.zip/file2.txt') >>> print(fobj.read()) I am file2.txt, ok.
使用sample3:自己打开包中包含的文件
packages3.zip是:
packages3.zip + foo.py + file1.txt + data3.zip + file3.txt
食物:
import os from zip_open import zopen def loader(filename): fobj = zopen(os.path.join(os.path.dirname(__file__), filename)) return fobj
从交互式shell执行loader():
>>> import sys >>> sys.path.insert(0, 'packages3.zip') >>> import foo >>> fobj = foo.loader('file1.txt') >>> print(fobj.read()) I am file1.txt, ok. >>> fobj = foo.loader('data3.zip/file3.txt') >>> print(fobj.read()) I am file3.txt, ok.
要求和依赖性
- 要求:Python2.4或更高版本
- 依赖:没有。
待办事项
- 添加tar.gz文件支持。
- 添加使用鸡蛋档案样本文件。
- 支持python3
- 添加模块导入功能。
历史记录
0.2.1(未发布)
- 修复:测试中断(以二进制方式打开文件)
- 如果没有设置工具,请使用distutils.core.setup。
0.2.0(2011-11-29)
- 将许可证从psl更改为apache许可证2.0
- 添加功能:从类似文件的对象打开。
0.1.0(2010-7-19)
- 首次发布