python +pyqt5实现小说章节错乱重组排序

一、现象及原理

1.现象:在网上下载小说时,偶尔会遇到小说章节顺序错乱,或章节重复的情况,现编写代码实现小说的排序重组

2.原理:

①提取章节序号存入列表s

②提取各个章节内容存入列表m

③对列表s进行数据转换(中文序号转换为阿拉伯数字,eg:一百二十五---->125)

④将s和m组成dict

⑤将dict按照key进行排序

⑥输出新文件

⑦用pyqt5编写界面实现交互

⑧另:路径、文件检查;文件的读写

 

二、源码

1.排序实现,有详细注释

'''
author:Kilter.wang
time:2019/4/25

'''

class Fiction_Sort(object):
    def __init__(self,path):
        self.__path=path
        self.__common_used_numerals = {'零': 0, '一': 1, '二': 2, '两': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9,
                                '十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 100000000}
        self.__error=""
        self.new_path=""
    #检验文件
    def judge_format(self):
        # 检验路径是否真实存在
        if not os.path.exists(self.__path):
            self.__error="路径不存在,请重新输入。。。"
        #检验给出的路径是否是一个文件
        elif not os.path.isfile(self.__path):
            self.__error="该路径下没有发现文件,请确认路径是否正确"
        #检验是否是txt
        elif not os.path.splitext(os.path.split(self.__path)[1])[1] == ".txt":
            self.__error="该文件不是txt,不符合要求"
        else:
            self.__error=self.sorted()
        return self.__error

    def sorted(self):
        try:
            fr = open(self.__path, 'r', encoding="utf-8")
            txts = fr.readlines()
            # 暂时存放每一章节内容的列表
            l = []
            # 存放章节序号的列表
            s = []
            # 列表元素为各个章节内容
            m = []
            # num :判断一章节内容读取完毕标志
            # str_ :过渡的字符串

            for x in txts:
                if "第" and "章" in x and x[0] == "第":
                    num = True
                    l.append(x)
                    # 获取章节号
                    s.append(x.split("第")[1].split("章")[0])
                else:
                    num = False
                    l.append(x)

                if num:
                    # 对暂存的内容进行处理,得到各个章节内容
                    str_ = ""
                    for x in l[:-1]:
                        str_ += x
                    l[0] = l[-1]
                    l = l[0:1]
                    m.append(str_)
                # 由于处理算法原因,导致最后一章节无法获取,故加此条件进行处理,存储最后一章节
                elif x == txts[-1]:
                    str_ = ""
                    for x in l:
                        str_ += x
                    m.append(str_)
            # 对章节编
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值