用脚本转换文档为书籍格式

wen 实用脚本 2

本文目录导读:

用脚本转换文档为书籍格式

  1. 方案一:Markdown 转 Epub 电子书
  2. 方案二:文本文件转简易书籍格式
  3. 方案三:批量转换工具
  4. 使用说明

我来帮你创建一个将文档转换为书籍格式的脚本,这里提供几个常用格式的转换方案:

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

使用方法

  1. Markdown转Epub:

    python script.py 文档.md 输出.epub
  2. 文本转书籍格式:

    python script.py 文档.txt 书籍版.txt
  3. 批量转换:

    chmod +x convert_book.sh
    ./convert_book.sh 文档目录/

这些脚本会为文档添加页码、目录、页眉页脚等书籍元素,使普通文档更接近书籍的阅读体验。

抱歉,评论功能暂时关闭!