本文目录导读:

我来帮你创建一个将文档转换为书籍格式的脚本,这里提供几个常用格式的转换方案:
Markdown 转 Epub 电子书
#!/usr/bin/env python3
"""
文档转书籍格式脚本 - Markdown to Epub
需要安装: pip install markdown ebooklib
"""
import os
import re
from pathlib import Path
import markdown
from ebooklib import epub
def create_book_from_markdown(md_file, output_path=None):
"""
将Markdown文件转换为Epub电子书
"""
# 读取Markdown文件
with open(md_file, 'r', encoding='utf-8') as f:
md_content = f.read()
# 解析标题作为章节
chapters = re.split(r'\n## ', md_content)
# 创建书籍
book = epub.EpubBook()
# 设置元数据
book.set_identifier('id_' + str(hash(md_file)))
book.set_title(os.path.basename(md_file).replace('.md', ''))
book.set_language('zh-CN')
book.add_author('自动生成')
# 转换每个章节
chapters_epub = []
for i, chapter in enumerate(chapters):
if i == 0:
# 第一个章节作为前言
html_content = markdown.markdown(chapter)
chapter_item = epub.EpubHtml(
title='前言',
file_name='chap_00.xhtml',
lang='zh-CN'
)
chapter_item.content = f'<html><body>{html_content}</body></html>'
else:
# 其他章节
title = chapter.split('\n')[0]
content = '\n'.join(chapter.split('\n')[1:])
html_content = markdown.markdown(content)
chapter_item = epub.EpubHtml(
title=title,
file_name=f'chap_{i:02d}.xhtml',
lang='zh-CN'
)
chapter_item.content = f'<html><body><h1>{title}</h1>{html_content}</body></html>'
book.add_item(chapter_item)
chapters_epub.append(chapter_item)
# 设置目录
book.toc = chapters_epub
# 添加导航
book.add_item(epub.EpubNcx())
book.add_item(epub.EpubNav())
# 设置封面
book.spine = ['nav'] + chapters_epub
# 输出文件
if output_path is None:
output_path = os.path.splitext(md_file)[0] + '.epub'
epub.write_epub(output_path, book, {})
print(f"书籍已生成: {output_path}")
return output_path
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("用法: python script.py <markdown文件> [输出路径]")
sys.exit(1)
md_file = sys.argv[1]
output_path = sys.argv[2] if len(sys.argv) > 2 else None
if os.path.exists(md_file):
create_book_from_markdown(md_file, output_path)
else:
print(f"文件不存在: {md_file}")
文本文件转简易书籍格式
#!/usr/bin/env python3
"""
文本文件转书籍格式 - 添加页码、目录等
"""
import os
import textwrap
class TextBook:
"""简单的文本书籍格式化工具"""
def __init__(self, page_width=70, page_height=40):
self.page_width = page_width
self.page_height = page_height
self.pages = []
def format_text(self, text_content):
"""格式化文本为书籍页面"""
lines = text_content.split('\n')
page_content = []
page_num = 1
for line in lines:
# 处理长行
if len(line) > self.page_width:
wrapped = textwrap.fill(line, width=self.page_width)
wrapped_lines = wrapped.split('\n')
page_content.extend(wrapped_lines)
else:
page_content.append(line)
# 分页
if len(page_content) >= self.page_height:
self.pages.append({
'number': page_num,
'content': page_content[:self.page_height]
})
page_content = page_content[self.page_height:]
page_num += 1
# 处理剩余内容
if page_content:
self.pages.append({
'number': page_num,
'content': page_content
})
def save_book(self, output_path):
"""保存为书籍格式"""
with open(output_path, 'w', encoding='utf-8') as f:
# 写入标题
f.write(f"{'=' * 60}\n")
f.write(f"{'文本书籍'.center(58)}\n")
f.write(f"{'=' * 60}\n\n")
# 写入目录
f.write("目 录\n")
f.write("-" * 60 + "\n")
f.write(f"共 {len(self.pages)} 页\n\n")
# 写入每页内容
for page in self.pages:
f.write(f"\n{'=' * 60}\n")
f.write(f"第 {page['number']} 页".center(58) + "\n")
f.write(f"{'=' * 60}\n\n")
for line in page['content']:
f.write(line + '\n')
f.write(f"\n{'=' * 60}\n")
f.write(f"— {page['number']} —".center(58) + "\n")
print(f"书籍已生成: {output_path}")
def convert_to_book(input_file, output_file=None):
"""转换文本文件为书籍格式"""
if not os.path.exists(input_file):
print(f"错误: 文件 {input_file} 不存在")
return False
# 读取输入文件
with open(input_file, 'r', encoding='utf-8') as f:
content = f.read()
# 创建书籍
book = TextBook()
book.format_text(content)
# 确定输出文件名
if output_file is None:
base_name = os.path.splitext(input_file)[0]
output_file = f"{base_name}_书籍版.txt"
# 保存
book.save_book(output_file)
return True
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("用法:")
print(f" python {sys.argv[0]} <输入文件> [输出文件]")
print("示例:")
print(f" python {sys.argv[0]} 我的文档.txt")
print(f" python {sys.argv[0]} 文档.txt 书籍版.txt")
sys.exit(1)
input_file = sys.argv[1]
output_file = sys.argv[2] if len(sys.argv) > 2 else None
if convert_to_book(input_file, output_file):
print("转换完成!")
else:
print("转换失败!")
批量转换工具
#!/bin/bash
# 批量文档转书籍格式脚本
echo "=== 文档转书籍格式工具 ==="
echo ""
# 检查参数
if [ $# -lt 1 ]; then
echo "用法: $0 <文件或目录>"
echo "支持格式: .txt .md .html"
exit 1
fi
TARGET="$1"
# 转换函数
convert_file() {
local file="$1"
local ext="${file##*.}"
local base="${file%.*}"
echo "正在转换: $file"
case "${ext,,}" in
txt)
# 文本文件 - 添加页码和格式
awk '
BEGIN {
page = 1
line_count = 0
}
{
if (line_count >= 40) {
printf "\n\n--- 第 %d 页 ---\n\n", page
page++
line_count = 0
}
print
line_count++
}
END {
printf "\n\n--- 第 %d 页 ---\n", page
printf "\n总页数: %d\n", page
}
' "$file" > "${base}_书籍版.txt"
echo " -> ${base}_书籍版.txt"
;;
md)
# Markdown文件 - 转换为更好的格式
sed 's/^# /# 第1章 /' "$file" > "${base}_书籍版.md"
echo " -> ${base}_书籍版.md"
;;
html)
# HTML文件 - 简化格式
html2text "$file" > "${base}_书籍版.txt" 2>/dev/null || \
echo " [警告] 需要安装 html2text"
;;
*)
echo " [跳过] 不支持的文件格式: $ext"
;;
esac
}
# 处理文件或目录
if [ -f "$TARGET" ]; then
convert_file "$TARGET"
elif [ -d "$TARGET" ]; then
echo "处理目录: $TARGET"
find "$TARGET" -type f \( -name "*.txt" -o -name "*.md" -o -name "*.html" \) | while read file; do
convert_file "$file"
done
else
echo "错误: 文件或目录不存在"
exit 1
fi
echo ""
echo "转换完成!"
使用说明
安装依赖(方案一需要)
pip install markdown ebooklib
使用方法
-
Markdown转Epub:
python script.py 文档.md 输出.epub
-
文本转书籍格式:
python script.py 文档.txt 书籍版.txt
-
批量转换:
chmod +x convert_book.sh ./convert_book.sh 文档目录/
这些脚本会为文档添加页码、目录、页眉页脚等书籍元素,使普通文档更接近书籍的阅读体验。