【发布时间】:2012-02-17 16:49:05
【问题描述】:
我最近买了一个 Nook Simple Touch。我使用 Calibre 管理我的电子书,并将它们传输到 Nook。
由于 B&N 对 epub 规范的非标准实施,Nook ST 在从许多来源获得封面图像时不会显示它们。此处描述了该问题:http://john.nachtimwald.com/2011/08/21/nook-covers-not-showing-up/ 基本上,Nook ST 要求封面的 XML 属性采用以下格式:
<meta name="cover" content="id5" />
但许多 epub 创作者都以这种方式使用它们:
<meta content="id5" name="cover" />
然后 Nook ST 会完全忽略封面图片。
我一直在手动编辑我的 epub 文件中的 content.opf 文件。到目前为止,他们都有图像元,但它总是围绕“错误”的方式(根据 Nook 的说法是错误的)。
最近我一直在玩 REGEX,主要是为了尝试自动清理 Calibre 从 PDF 文件转换的 epub。我仍然是 REGEX 的初学者。
我想知道如何自动交换“名称”和“内容”属性?我认为它可以通过 REGEX 和脚本的组合来完成。我知道我拥有的其他一些与 epub 相关的脚本是用 Python 编写的。我在 Mac (OS X) 上,它们似乎运行良好。 AppleScript 也可能是一个不错的选择,尽管我希望人们可以在任何平台上运行它,因为我相信其他人会发现这很有用。
以下是我预见的步骤:
~解压epub文件
~使用正则表达式查找:
<meta content="???" name="cover">
~ 如果找到,使用 REGEX 将其更改为:
<meta name="cover" content="???">
~ 使用正确的压缩过程将提取的文件压缩回 epub。
我在这里找到了信息:http://www.mobileread.com/forums/showthread.php?t=55681 解释如何正确压缩 epub 文件。基本上它需要这两个命令:
zip -X0 "full path to new epub file" mimetype
zip -rDX9 "full path to new epub file" * -x "*.DS_Store" -x mimetype
我想将生成的脚本发布到任何可能找到和使用的地方(直到 B&N 解决他们糟糕的 epub/XML 实现)。我想到了在 Calibre 论坛和 mobileread 论坛上发布它(因为它们是我熟悉的两个,并且已经看到人们讨论此问题的手动修复)。
有人可以指导我如何创建这样的脚本吗?理想情况下,我很想真正知道如何创建脚本,这样随着时间的推移,我可以自己开始弄清楚这些事情(尤其是 REGEX 部分,因为我越来越看到它是多么有用)。
谢谢。
乔纳森
@Haldean:添加以说明我在对 Haldean 的评论中关于使他的脚本递归地通过所有子文件夹中的所有 content.opf 文件工作的意思。
> My_expanded_epubs
- -> epub_one_expanded
- - - -> content.opf
- -> epub_two_expanded
- - - -> content.opf
- -> epub_three_expanded
- - - -> content.opf
etc.
【问题讨论】:
-
你有一个正则表达式可以正确识别你正在寻找的元标签吗?
-
另外,你应该向 B&N 投诉。没有任何理由让 XML 处理器要求属性按任何特定顺序排列。
-
谢谢马尔辛。我现在正在向 B&N 发送有关此问题的消息。
-
我在 Stackoverflow 和 Google 上搜索了“解压 epub 文件 python”,但没有发现任何有用的信息。我有这个想法是在叫错树吗?我发现了很多关于使用 python 从 epub 中删除 DRM 的内容,但不是简单地解压 epub(并重新打包)。我知道我很可能会使用 AppleScript 将各个步骤拼凑在一起,但我真的希望它独立于平台。
标签: python regex automation epub