我想在Python中创建一个上传电子书至iBook的Epub上传器。我需要一个Python库来提取图书信息。在自行实现之前,我想知道是否有已经制作好的Python库可以实现该功能。
我想在Python中创建一个上传电子书至iBook的Epub上传器。我需要一个Python库来提取图书信息。在自行实现之前,我想知道是否有已经制作好的Python库可以实现该功能。
一个.epub文件是一个经过zip编码的文件,其中包含一个META-INF目录,该目录包含一个名为container.xml的文件,该文件指向另一个通常名为Content.opf的文件,该文件索引组成电子书的所有其他文件(参考http://www.jedisaber.com/eBooks/tutorial.asp ; 完整规范位于http://www.idpf.org/2007/opf/opf2.0/download/)。
以下Python代码将从.epub文件中提取基本元信息,并将其作为字典返回。
import zipfile
from lxml import etree
def epub_info(fname):
def xpath(element, path):
return element.xpath(
path,
namespaces={
"n": "urn:oasis:names:tc:opendocument:xmlns:container",
"pkg": "http://www.idpf.org/2007/opf",
"dc": "http://purl.org/dc/elements/1.1/",
},
)[0]
# prepare to read from the .epub file
zip_content = zipfile.ZipFile(fname)
# find the contents metafile
cfname = xpath(
etree.fromstring(zip_content.read("META-INF/container.xml")),
"n:rootfiles/n:rootfile/@full-path",
)
# grab the metadata block from the contents metafile
metadata = xpath(
etree.fromstring(zip_content.read(cfname)), "/pkg:package/pkg:metadata"
)
# repackage the data
return {
s: xpath(metadata, f"dc:{s}/text()")
for s in ("title", "language", "creator", "date", "identifier")
}
示例输出:
{
'date': '2009-12-26T17:03:31',
'identifier': '25f96ff0-7004-4bb0-b1f2-d511ca4b2756',
'creator': 'John Grisham',
'language': 'UND',
'title': 'Ford County'
}
比如像epub-tools这样的工具?但那主要是关于编写epub
格式(从各种可能的来源),就像epubtools一样(拼写相似,但是是不同的项目)。对于阅读它,我会尝试使用配套项目threepress,这是一个用于在浏览器上显示epub书籍的Django应用程序--虽然我没有看过那个代码,但我想为了展示这本书,它肯定必须首先能够阅读它;-)。
在寻找类似内容后,我来到了这里,并受到Bothwell先生代码片段的启发,开始了自己的项目。如果有人感兴趣... http://epubzilla.odeegan.com/