跳转到主要内容

从嵌套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 (4.0 kB 查看哈希值)

上传时间

由以下支持