arc53/fast-ebook
GitHub: arc53/fast-ebook
基于 Rust 的高性能 Python EPUB 读写库,兼容 ebooklib API 并大幅提升处理速度。
Stars: 61 | Forks: 4
# fast-ebook
[](https://pypi.org/project/fast-ebook/)
[](https://github.com/arc53/fast-ebook/actions/workflows/ci.yml)
基于 Rust 驱动的 Python EPUB2/EPUB3 库。快速读取、写入、校验和 Markdown 转换 — MIT 许可证。
## 有多快?
将 **战争与和平** (1.8 MB EPUB) 转换为单个 Markdown 文档:
| 库 | 耗时 | |
|---|---:|---|
| ebooklib + html2text | 375 ms | 基准线 |
| **fast-ebook `book.to_markdown()`** | **56 ms** | **快 6.7 倍** |
```
from fast_ebook import epub
book = epub.read_epub('war_and_peace.epub')
markdown = book.to_markdown()
```
对同一本书的其他操作 — 读取并提取所有章节快 **3** 倍,`get_item_with_id` 快 **78** 倍。完整数据和方法论:[docs/benchmarks.md](docs/benchmarks.md)。
## 安装
```
pip install fast-ebook
```
## 快速入门
## 从 ebooklib 迁移
公共 API 与 ebooklib 相同 — 对于大多数代码,您只需更改导入即可:
```
from fast_ebook import epub
import fast_ebook # for ITEM_* constants
```
或者使用直接替换的兼容层,只需修改一行:
```
import fast_ebook.compat as ebooklib
from fast_ebook.compat import epub
```
### 读取
```
from fast_ebook import epub
import fast_ebook
book = epub.read_epub('book.epub')
print(book.get_metadata('DC', 'title'))
for img in book.get_items_of_type(fast_ebook.ITEM_IMAGE):
print(img.get_name(), len(img.get_content()), 'bytes')
item = book.get_item_with_id('chapter1')
for entry in book.toc:
print(entry.title, entry.href)
```
也接受 `Path`、`bytes` 或 `BytesIO`。有关完整的读取 API、选项(`lazy`、`ignore_ncx`、`ignore_nav`)以及上下文管理器形式,请参阅 [docs/api.md](docs/api.md)。
### 写入
```
from fast_ebook import epub
book = epub.EpubBook()
book.set_identifier('id123')
book.set_title('My Book')
book.set_language('en')
book.add_author('Author Name')
c1 = epub.EpubHtml(title='Intro', file_name='chap_01.xhtml', lang='en')
c1.content = '
Hello
World
' book.add_item(c1) book.add_item(epub.EpubNcx()) book.add_item(epub.EpubNav()) book.toc = [epub.Link('chap_01.xhtml', 'Introduction', 'intro')] book.spine = ['nav', c1] epub.write_epub('output.epub', book) ``` ### 转换为 Markdown ``` md = epub.read_epub('book.epub').to_markdown() ``` ### 并行批量读取 ``` from fast_ebook import epub books = epub.read_epubs(['a.epub', 'b.epub', 'c.epub'], workers=4) ``` ## 文档 - [docs/api.md](docs/api.md) — 完整的 Python API 参考、选项、项类型、兼容层 - [docs/benchmarks.md](docs/benchmarks.md) — 与 ebooklib 对比的读取/写入/批量/Markdown 性能基准测试 - [docs/architecture.md](docs/architecture.md) — fast-ebook 的构建方式(Rust 核心,PyO3 桥接) - [docs/threat-model.md](docs/threat-model.md) — 解析不受信任的 EPUB 的安全模型 ## 许可证 MIT标签:ebooklib, EPUB, EPUB2, EPUB3, IT工具, Markdown, PyPI, Python, Rust, to_markdown, 兼容层, 可视化界面, 开发库, 开源, 提取, 文件解析, 文本提取, 无后门, 格式转换, 电子书, 电子书处理, 编写器, 网络流量审计, 解析, 跨语言绑定, 软件组件, 逆向工具, 通知系统, 阅读器, 验证