`
greatghoul
  • 浏览: 143635 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

python版小说分割转换器 | #python

阅读更多
  前段时间写了个简单的TXT2HTML小说转换器HTA版,现在拿python再实现一遍,自动按章节分割成多个HTML文件,并建立目录,方便阅读。

效果图:


脚本代码:
# encoding: gbk
#
# 将txt小说分割转换成多个HTML文件
#
# @author : GreatGhoul
# @email  : greatghoul@gmail.com
# @blog   : http://greatghoul.iteye.com

import re
import os

# regex for the section title
# sec_re = re.compile(r'第.+卷\s+.+\s+第.+章\s+.+')

# txt book's path.
source_path = 'f:\\佣兵天下.txt'

path_pieces = os.path.split(source_path)
novel_title = re.sub(r'(\..*$)|($)', '', path_pieces[1])
target_path = '%s%s_html' % (path_pieces[0], novel_title)
section_re = re.compile(r'^\s*第.+卷\s+.*$')
section_head = '''
    <html>
        <head>
            <meta http-equiv="Content-Type" content="GBK"/>
            <title>%s</title>
        </head>
        <body style="font-family:楷体,宋体;font-size:16px; margin:0;
            padding: 20px; background:#FAFAD2;color:#2B4B86;text-align:center;">
            <h2>%s</h2><a href="#bottom">去页尾</a><hr/>'''

# escape xml/html
def escape_xml(code):
    text = code
    text = re.sub(r'<', '&lt;', text)
    text = re.sub(r'>', '&gt;', text)
    text = re.sub(r'&', '&amp;', text)
    text = re.sub(r'\t', '&nbsp;&nbsp;&nbsp;&nbsp;', text)
    text = re.sub(r'\s', '&nbsp;', text)
    return text

# entry of the script
def main():
    # create the output folder
    if not os.path.exists(target_path):
        os.mkdir(target_path)

    # open the source file
    input = open(source_path, 'r')

    sec_count = 0
    sec_cache = []
    idx_cache = []

    output = open('%s\\%d.html' % (target_path, sec_count), 'w')
    preface_title = '%s 前言' % novel_title
    output.writelines([section_head % (preface_title, preface_title)])
    idx_cache.append('<li><a href="%d.html">%s</a></li>'
                     % (sec_count, novel_title))
        
    for line in input:
        # is a chapter's title?
        if line.strip() == '':
            pass
        elif re.match(section_re, line):
            line = re.sub(r'\s+', ' ', line)
            print 'converting %s...' % line

            # write the section footer
            sec_cache.append('<hr/><p>')
            if sec_count == 0:
                sec_cache.append('<a href="index.html">目录</a>&nbsp;|&nbsp;')
                sec_cache.append('<a href="%d.html">下一篇</a>&nbsp;|&nbsp;'
                                 % (sec_count + 1))
            else:
                sec_cache.append('<a href="%d.html">上一篇</a>&nbsp;|&nbsp;'
                                 % (sec_count - 1))
                sec_cache.append('<a href="index.html">目录</a>&nbsp;|&nbsp;')
                sec_cache.append('<a href="%d.html">下一篇</a>&nbsp;|&nbsp;'
                                 % (sec_count + 1))
            sec_cache.append('<a name="bottom" href="#">回页首</a></p>')
            sec_cache.append('</body></html>')
            output.writelines(sec_cache)
            output.flush()
            output.close()
            sec_cache = []
            sec_count += 1

            # create a new section
            output = open('%s\\%d.html' % (target_path, sec_count), 'w')
            output.writelines([section_head % (line, line)])
            idx_cache.append('<li><a href="%d.html">%s</a></li>'
                             % (sec_count, line))
        else:
            sec_cache.append('<p style="text-align:left;">%s</p>'
                             % escape_xml(line))
            
    # write rest lines
    sec_cache.append('<a href="%d.html">下一篇</a>&nbsp;|&nbsp;'
                     % (sec_count - 1))
    sec_cache.append('<a href="index.html">目录</a>&nbsp;|&nbsp;')
    sec_cache.append('<a name="bottom" href="#">回页首</a></p></body></html>')
    output.writelines(sec_cache)
    output.flush()
    output.close()
    sec_cache = []

    # write the menu
    output = open('%s\\index.html' % (target_path), 'w')
    menu_head = '%s 目录' % novel_title
    output.writelines([section_head % (menu_head, menu_head), '<ul style="text-align:left">'])
    output.writelines(idx_cache)
    output.writelines(['</ul><body></html>'])
    output.flush()
    output.close()
    inx_cache = []
    
    print 'completed. %d chapter(s) in total.' % sec_count

if __name__ == '__main__':
    main()


将其中的
引用
source_path = 'f:\\佣兵天下.txt'
修改成TXT小说的路径,再根据情况,稍微修改下匹配章节标题的正则
引用
section_re = re.compile(r'^\s*第.+卷\s+.*$')
即可。脚本会在小说所在目录生成一个"文件名_html"的文件夹用于存放节割后的文件。

刚刚接触python,感觉写的代码很不精简,请大家帮忙改进下。
  • 大小: 77.2 KB
分享到:
评论
1 楼 qiaoqinqie 2010-03-14  
谢谢楼主分享,我也刚开始学习python,学了点语法,不知道要学哪些具体的库?

相关推荐

    Python Machine Learning 第1-2版及中文版

    Python Machine Learning的第一版+第二版+中文第一版 Introduction 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人工神经元一窥早期机器学习历史 使用Python...

    基于深度学习的场景语义分割python源码+项目说明.zip

    基于深度学习的场景语义分割python源码+项目说明.zip 本文创建了SUPnetw网络实现利用有限开放基准测试与无语义标签实际城市竣工测绘三维场景数据共同进行训练模型,提高城市三维场景点云语义分割的性能 SUPnet网络...

    python计算机视觉编程

    1.1.1 转换图像格式 1.1.2 创建缩略图 1.1.3 复制和粘贴图像区域 1.1.4 调整尺寸和旋转 1.2 matplotlib 1.2.1 绘制图像、点和线 1.2.2 图像轮廓和直方图 1.2.3 交互式标注 1.3 numpy 1.3.1 图像...

    python cookbook(第3版)

    11.7 在不同的Python解释器之间交互 11.8 实现远程方法调用 11.9 简单的客户端认证 11.10 在网络服务中加入SSL 11.11 进程间传递Socket文件描述符 11.12 理解事件驱动的IO 11.13 发送与接收大型数组 第十二...

    20个python实战项目(附源码)

    20实战项目:1. 猜字游戏;2.闹钟;3.骰子模拟器;4.二维码;5.语言检测;...13.图像转换器;14.重量转换器;15.年龄和性别检测;16.人脸检测;17.铅笔素描;18.文本编辑器;19.图像分割;20.模拟时钟。

    python3.x Opencv Toturial

    本书针的读者是高校学生,科研工作者,图像处理爱好者。对于这些 人群,他们往往是带着具体的问题,在苦苦寻找解决方案。为了一个小问 题就让他们去学习 C++ 这么深奥的语言几乎是不...51使用 Haar 分类器进行面部检测

    touchosc-sooperlooper-converter:Python转换器管理TouchOSC和SooperLooper之间的兼容消息

    在这里,它用于分割TouchOSC的页面(此处为/1 ,需要反馈),“实际”的osc URL( /sl/-1/set )和“虚拟的”附加参数( wet )。 目前,唯一记录的反馈是您有一个推子映射到所有循环的音量(在上面定义了一个),...

    《Python+Cookbook》第三版中文v3.0.0.pdf 熊熊

    2.19 实现一个简单的递归下降分析器 . . . . . . . . . . . . . . . . . . . . . . . 77 2.20 字节字符串上的字符串操作 . . . . . . . . . . . . . . . . . . . . . . . . . 85 第三章:数字日期和时间 88 . . . ....

    基于图形的图像分割和分析工具_C++_代码_下载

    功能: 高效学习凝聚分类器的算法 有效地聚集过度分割的体积的算法 用于比较两个标记卷的信息度量变化的实现 估计分割图中不确定性的...Python 绑定,用于在Gala和Raveler等各种工具环境中访问 Rag、分割例程和编辑操作

    Python 科学计算

    1.1 Python 简介......................................1 1.2 安装软件包......................................2 1.2.1 Python(x,y)..................................... 2 1.2.2 Enthought Python ...

    颅骨分割matlab代码-skulldataprocessing:头骨数据处理

    Matlab脚本从CT扫描中分割人类头骨,清洁分割后的头骨,将头骨体积转换为网格并向健康头骨注入Kong洞。 Python 3.6 MATLAB R2018b MeshLab v2016.12 ITK-SNAP 3.6.0 3D切片机4.8.1 r26813 网格混合器3.5.474 通过CT...

    基于HAM10000数据集实现皮肤癌分类python源码+使用说明.zip

    4. 对图像进行预处理,包括随机裁剪、归一化和转换为tensor。 5. 加载预训练模型,构建分类器。 6. 训练模型,并在验证集上评估模型性能。 7. 在训练过程中,每隔logging_steps步记录一次训练日志,包括损失值、准确...

    panopticapi:COCO 2018全景分割任务API(测试版)

    有关脚本用法的更多信息: python -m panopticapi.evaluation --help 格式转换器COCO全景分割以新存储。 与COCO检测格式独立存储每个分段不同,COCO全全景格式将图像的所有分段存储在单个PNG文件中。 这种紧凑的...

    基于mindspore框架和GAN实现的漫画脸生成python源码+项目说明+模型.zip

    主要包含两个生成器Generator和四个辨别器Discriminator,也是本工作的主要完成训练框架转换的部分。本工作主要根据开源的pytorch代码,将其中的风格迁移模型U-GAT-IT的模型定义、训练和测试脚本改成了mindspore框架...

    SplitVideo:Python生成并执行appleScript将长视频分割成csv文件控制下的命名片段

    我的旧电脑有一个硬件 mpeg-2 编码器,但我拥有的视频编辑软件在导入和导出时进行转换 - 浪费大量时间。 QuickTime 可以修剪但很乏味,而且您无法对视频分割点进行亚秒级控制。 我在找到了一些 appleScript 来调用 ...

    模式识别课程项目一(轮廓处理,图像分割).zip

    本文首先研究使用Python语言和OpenCV对数字高程图DEM,运用高斯核、阈值化、以及形态学中的开运算、闭运算、对图像进行分割、边缘提取、提取建筑物轮廓,并将其组织成顶点和线段的矢量格式,输出成为矢量化数字地图...

    CSBHMM:基于HMM模型的中文分割器

    For English readme content, please roll down. ####这是一个建立在HMM模型上的中文分词程序 ######程序说明: 本程序基于python2.7.10 windows...用来在不同的语料格式之间做转换。 eval目录下是一个分词评价脚本,可

    Map-Tiler:一个 Python 脚本,用于获取一系列图像层并将它们与图块集一起转换为平铺文件

    一个 Python 脚本,用于获取一系列图像/图层并将它们与图块集一起转换为平铺文件。 我正在做一个项目,并在矢量艺术程序中创建了一个具有多层(地板、墙壁、门、物体等)的地图。 当我想将其导入到 tilemap 程序...

    PDFsuite:用于MacOS(OS X)的Python脚本,Automator Services和Quartz筛选器,用于创建,操作和查询PDF文件

    将PDF转换为图像并将图像转换为PDF 小册子拼版,裁剪和修剪PDF 旋转PDF 将页码,水印,色彩或其他文本和图形添加到PDF 将Quartz过滤器应用于PDF 读取和写入元数据(例如作者,创建者,目录)到PDF 这一切都是...

Global site tag (gtag.js) - Google Analytics