[python]将TXT格式的文本转换为EPUB格式
最近想将从网上爬取的**.txt
文本文件放到kindle里阅读,但是现在kindle和苹果一样,支持.epub
**格式的文件,以前的mobi等格式的文件已经不流行了。于是想写一个格式转换工具。
为了让**.txt
文本文件也能在Kindle或者苹果设备的iBooks阅读器中阅读,并且包含目录等信息,需要将.txt
文本文件转换为.epub
**格式的文件。下面使用python写了一个转换工具,利用ebooklib库,可以转换包含类似以下形式的文本内容的txt文件:
第1章 标题1
第1章内容...
第二章 标题2
第二章内容...
1、 安装ebooklib包
电脑上需安装python和pip工具,这个就不说了。
在终端使用pip或者pip3安装能处理epub格式的ebooklib库。
pip install ebooklib
2、 使用和运行python代码进行转换
创建一个python文件,比如convertTxtToEpub.py
,内容如下。
修改下面代码中的路径和书籍信息,使其适用于自己的文件。
import re, os, sys
from ebooklib import epub
'''
指定txt文件路径和书籍信息, 将txt文件转换为ePub格式的文件。
生成的文件里包含有目录,设置了初始文字字体大小和段落首行缩进。
'''
# 将以下路径和书籍信息,修改为自己的文件对应的信息
input_file_name = "书名.txt"
output_file_name = "书名.epub"
input_folder_path = "/Users/user/Documents/books/"
output_folder_path = "/Users/user/Documents/books/"
# 设置书籍元数据
book_title = "书名"
book_author = "作者名"
# 设置文本字体大小
font_size = "16px"
# 设置所读取文件的编码格式
encoding = 'utf-8'
def main():
input_file_path = os.path.join(input_folder_path, input_file_name)
output_file_path = os.path.join(output_folder_path, output_file_name)
# 调用函数创建ePub文件
create_epub(input_file_path, output_file_path)
def create_epub(txt_path, epub_path):
# 创建ePub书籍对象
book = epub.EpubBook()
# 设置元数据
book.set_title(book_title)
book.set_language("zh")
book.add_author(book_author)
# 打开txt文件并读取内容
try:
with open(txt_path, 'r', encoding=encoding) as file:
try:
content = file.readlines()
# 其他文件处理逻辑
except UnicodeDecodeError as e:
print(f"解析Unicode错误: {e} at position {e.start}")
print(f"错误字符: {e.object[e.start:e.end]}")
print("解决方法:修改编码格式,比如改成'utf-8'或'gbk'")
sys.exit(1) # 终止程序执行
except FileNotFoundError:
print(f"文件未找到: {txt_path}")
sys.exit(1)
except Exception as e:
print(f"发生错误: {e}")
sys.exit(1)
current_chapter = None
chapter_content = ''
# 遍历文本行
for line in content:
line = line.strip()
# 使用正则表达式匹配章节标题
pattern = r'^\s*第\s*[0-9一二三四五六七八九十百千万]+\s*[章回卷]\s+\S+'
match = re.match(pattern, line)
if match:
# 如果已经有当前章节,将其添加到书籍中
if current_chapter is not None:
c = epub.EpubHtml(title=current_chapter, file_name=f"{current_chapter}.xhtml", lang='zh')
c.content = f"<h1>{current_chapter}</h1><style>p {{font-size: 16px;}}</style><p>{chapter_content}</p>"
book.add_item(c)
book.toc.append(c)
book.spine.append(c) # 将章节添加到spine中,确保章节链接顺序正确
# 更新当前章节和内容
current_chapter = line
chapter_content = ''
# 跳过处理标题行
continue
# 判断当前行是否为空行,如果是空行,则在chapter_content末尾添加一个空的<p>标签
if not line:
chapter_content += "<p> </p>"
else:
# 添加行内容到当前章节内容并添加首行缩进效果
chapter_content += f"<p><span style='margin-left: 2em'>{line}</span></p>"
# 处理最后一个章节
if current_chapter is not None:
c = epub.EpubHtml(title=current_chapter, file_name=f"{current_chapter}.xhtml", lang='zh')
c.content = f"<h1>{current_chapter}</h1><style>p {{font-size: 16px;}}</style><p>{chapter_content}</p>"
book.add_item(c)
book.toc.append(c)
book.spine.append(c)
# 设置书籍的目录
book.add_item(epub.EpubNcx())
book.add_item(epub.EpubNav())
# 设置目录属性
book.spine = ['nav'] + book.spine
# 生成ePub文件
epub.write_epub(epub_path, book, {})
print("转换结束。")
if __name__ == '__main__':
main()
在终端运行python文件:
python convertTxtToEpub.py
或者直接使用合适的编辑器运行即可。
3、 用阅读器打开EPUB文件
将**.epub
**格式的文件导入kindle或苹果设备中打开,就可以顺利阅读了。