从嵌套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)

  • 首次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用无循环和乘法的递归调用查找值   java字符串大小冲突   在一组Java文件对象中查找唯一的超级目录   没有Eclipse控制台输出窗口(Java)?   java这怎么等于105而不是15?   java Adempiere列调出,用于不处理从(代码)选项导入和创建行的字段   java tomcat、2个webapps、2个log4js,但这两个应用都记录到一个文件中   lambda理解Java谓词   HotspotFX上的Java EOF问题   java google应用程序引擎:如何向连接/断开通道“ping”添加信息?   java如何使用VTDXML获取一个元素的所有名称空间声明?   java如何使用drawLine()获得一条线以随机方向拍摄?   java transactionManager应该使用哪个SessionFactory?   java在安卓上播放声音   在Mac上使用JBDC对SQL Server进行java Windows身份验证   java基本列表和字符串[]   java NamedParameterJdbcTemplate从中选择*   扩展上的java Android可扩展列表视图   使用ApacheAxis2的java SOAP附件