从嵌套zip文件存档中打开文件。
项目描述
zip_open 从嵌套zip文件存档中打开文件。
如果您使用静态文件如“data.zip”,并从您的Python代码中打开它,则您的程序将类似于以下代码open(os.path.join(os.path.dirname(__file__), 'data.zip'))。但如果您的包打包到“packages.zip”文件(zipped-egg或需要打包到一个文件上的Google App Engine情况),则您的代码可能无法正常工作。
在这种情况下,“data.zip”的文件路径变为/path/to/packages.zip/data.zip,然后您的程序无法打开“data.zip”文件。
zip_open 包解决了这个问题。
特性
从嵌套zip存档文件路径/名称打开文件。
从嵌套zip存档文件-like-object打开文件。
使用示例1:从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.
使用示例2:从嵌套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.
如果您想从文件-like-object中打开,可以调用
>>> 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.
使用示例3:打开包含在包本身的文件
packages3.zip是
packages3.zip + foo.py + file1.txt + data3.zip + file3.txt
foo.py
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.
需求和依赖关系
需求:Python 2.4或更高版本
依赖项:无。
待办事项
添加tar.gz文件支持。
添加egg存档的示例文档使用。
支持Python3
添加模块导入功能。
历史
0.2.1(未发布)
修复:测试失败(以二进制方式打开文件)
如果没有setuptools,请使用distutils.core.setup。
0.2.0 (2011-11-29)
将许可证从PSL更改为Apache License 2.0。
新增功能:从文件类似对象打开。
0.1.0 (2010-7-19)
首次发布
项目详情
关闭
zip_open-0.2.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 26dcaa6e4df33a494e62a8140696a90ced8e5659a72c9986f98d3137b898f0cc |
|
MD5 | 88461d10441e91cda0f38b84ed2a1eb2 |
|
BLAKE2b-256 | 4960943cea8f6a3fce793b7552d0b4f4621745c7c4a3dad654421b87722c0649 |