用于读写ucf和epub格式的库

UCFlib的Python项目详细描述


ucflib是一个用于读写ucf格式文件的python模块。

adobe的一些产品使用ucf格式,包括indesign idml。ucflib还可以用于读取ocf/epub电子书和libreoffice odt文件,因为它们使用相同的结构(压缩目录)。

有关详细信息,请参见Adobe网站上的the UCF documentationEPUB Open Container Format (OCF) 3.0 specification

ucflib是根据mit许可证提供的。

安装

ucflib需要python 2.7或python 3.2或更高版本。您可以使用pip从pypi安装它:

pip install ucflib

或者,您可以下载并解压缩源代码。然后cd进入源目录,并使用以下命令安装它:

python setup.py install

创建新文件

import ucf

my_doc = ucf.UCF(mimetype='application/epub+zip')

my_doc['OPS/chapter-1.xhtml'] = b'<?xml ?>'
my_doc['OPS/epb.opf'] = b''
my_doc.rootfiles.append(('OPS/epb.opf', 'application/oebps-package-xml'))

my_doc.save(filename='my_doc.epub')

参数filename可以是字符串,也可以是任何类似文件的对象,可以打开以供写入。或者,如果在创建实例时包含filename,则在保存时可以省略filename

my_doc = ufc.UCF(filename='my_doc.epub')
my_doc['OPS/epb.opf'] = b''
my_doc.save()
< H2>读取现有文件

创建新实例时使用filename参数。filename可以是字符串,也可以是打开以供读取的任何类似文件的对象:

import ucf

my_doc = ucf.UCF(filename='my_doc.epub')

ucf的一个实例是一个有序字典。密钥是存档中文件的名称,并且始终是Unicode字符串。这些值是文件的内容,并且始终是字节字符串。

list(my_doc.keys())

mimetype属性便于访问包中的“mimetype”文件。ucf规范规定该值必须是ascii字符串,因此如果您分配unicode字符串,ufclib将为您编码:

my_doc.mimetype = unicode('application/oebps-package-xml')
assert isinstance(my_doc.mimetype, bytes) # True

epub规范要求存档文件中有一个“meta-inf/container.xml”文件。您可以使用快捷方式引用存档文件中“META-INF”目录中的任何文件:

my_doc.meta[u'container.xml']
# Equivalent to
my_doc['META-INF/container.xml']

特殊的“meta-inf/container.xml”文件用于在归档文件中查找主文档。可以使用“rootfiles”属性(元组列表)访问路径和mime类型。每个元组实际上是一个命名元组:

for my_tuple in my_doc.rootfiles:
    my_tuple.path, my_tuple.mimetype

要在根文件列表中创建新条目,只需添加一个元组(或命名元组):

my_tuple = ucf.Rootfile(path='OPS/epb.opf', mimetype='application/oebps-package-xml')
my_doc.rootfiles.append(my_tuple)

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

推荐PyPI第三方库


热门话题
c#什么时候使用公共字段才有意义?   JavaRMI何时创建存根、启动注册表并指定代码库?   java强制子级使用自己定义的枚举   java安卓跨越Html。fromHtml(stringWithCDATA)仍然将标记显示为文本   java如何通过按键和释放使循环开始和结束?   java我可以使用什么工具从多个图像创建单个PNG?   java Sonarqube给了我删除代码的问题,无法过滤问题   java Firebase Firestore:如何在Android上将文档对象转换为POJO   JavaSwing:JTextArea列问题   java将数组对象及其变量列表到Main方法   java解析wsdl url中的目标targetNamespace和名称   java Mockito无法正确地将list作为参数存根方法   java无法从资源加载文件,路径似乎错误   java forEach参数与使用者功能接口参数不匹配,但代码仍然可以编译,为什么?   在Java中,多线程将参数传递给调用方法。util。同时发生的   图像处理与颜色检测   在Eclipse中调试时重新加载java类   java XPages:richtext值上的Base64数组错误