一、现象及原理
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_)
# 对章节编