如何使用Python实现epub2到epub3格式的自动转换
EPUB2转EPUB3 Python实现方案
以下提供两种可直接落地的实现方式,均可以通过Python脚本一键完成转换:
方案1:纯Python实现(无第三方工具依赖)
依赖ebooklib库完成epub结构的读取、规范转换、导出,适合轻量格式的epub2文件转换:
安装依赖
pip install ebooklib
转换代码示例
from ebooklib import epub import uuid def epub2_to_epub3(input_path: str, output_path: str) -> None: # 读取epub2文件 book = epub.read_epub(input_path) # 重置为epub3规范 book.version = epub.EPUB3 # 生成符合epub3要求的唯一标识 book.set_identifier(str(uuid.uuid4())) # 生成epub3必填的nav导航文件 nav = epub.EpubNav() nav.add_item( epub.EpubHtml( title='Navigation', file_name='nav.xhtml', media_type='application/xhtml+xml', content='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>' ) ) book.add_item(nav) book.spine.insert(0, nav) # 移除epub2专属的ncx索引(可选保留兼容旧阅读器) # for item in book.get_items(): # if item.get_type() == ebooklib.ITEM_NCX: # book.items.remove(item) # 导出epub3文件 epub.write_epub(output_path, book, {}) # 调用示例 if __name__ == "__main__": epub2_to_epub3("input_epub2.epub", "output_epub3.epub") print("转换完成,输出文件:output_epub3.epub")
方案2:调用Calibre转换内核实现(兼容性更高)
如果你的epub2文件包含复杂排版、内嵌资源,推荐使用该方案,转换后的epub3规范度更高,格式丢失率极低:
前置要求
先安装Calibre桌面端,安装完成后确保ebook-convert命令可以在终端正常调用
转换代码示例
import subprocess import os def epub2_to_epub3(input_path: str, output_path: str) -> None: # 调用calibre转换命令,指定输出为epub3规范 cmd = [ "ebook-convert", os.path.abspath(input_path), os.path.abspath(output_path), "--epub-version=3" ] # 执行转换 result = subprocess.run(cmd, capture_output=True, text=True) if result.returncode != 0: raise RuntimeError(f"转换失败:{result.stderr}") # 调用示例 if __name__ == "__main__": epub2_to_epub3("input_epub2.epub", "output_epub3.epub") print("转换完成,输出文件:output_epub3.epub")
注意事项
- 转换完成后可使用epubcheck工具校验生成的文件是否符合epub3官方规范
- 对有加密、DRM保护的epub文件需要先解密后再执行转换
内容的提问来源于stack exchange,提问作者Victor Simon
相关产品推荐
相关产品推荐

