TA的每日心情 | 无聊 2023-3-18 18:33 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
星辰大海
- 积分
- 406059
|
本帖最后由 Lambholl 于 2022-12-16 23:19 编辑
为了满足我的强迫症需求,就写了这么一个工具,放到了 github 上:
https://github.com/Lambholl/ChapterRenamer
(暂且取名叫 LPSub Chapters Proceeder?
用 python 写的,可以作为模块导入,也可以直接作为一个 gui 成品运行
下面引用 ChatGPT 对这个代码的分析(因为 ChatGPT 的讲解非常通俗易懂,比我讲的肯定好懂)
这段代码实现了一个Chapter类,它接收一个文本字符串作为初始化输入,并提取其中的信息。在这个类的初始化方法中,它使用正则表达式来匹配文本中的时间信息和章节名称,并将这些信息存储在对象的times和chapterNames属性中。该类还包含三个方法,分别为seekForOP,seekForED和rename。
seekForOP方法用于在times属性中查找片头的位置。 seekForED方法用于在times属性中查找片尾的位置。 rename方法用于更新chapterNames属性,将片头(OP)和片尾(ED)的章节名称更新为"OP"和"ED",并将其他章节名称更新为"Part A","Part B"等。
在这个类的初始化方法中,OP_range和ED_range参数是可选的,它们是两个包含两个数字的列表或元组,用于指定片头和片尾可能出现的时间范围。
rename方法用于更新Chapter对象的chapterNames属性。它首先调用seekForOP和seekForED方法来查找片头(OP)和片尾(ED)的位置。然后,它使用一系列if和for循环语句来更新chapterNames属性。
首先,它判断是否找到了片头(OP)。如果找到了,它将片头章节的章节名称更新为"OP"。然后,它再判断是否找到了片尾(ED)。如果找到了,它将片尾章节的章节名称更新为"ED"。然后,它使用for循环语句将其余的章节名称更新为"Part A","Part B"等。如果未找到片尾(ED),则rename方法会进行其他操作,将片尾之后的章节名称更新为"Preview",并将其余章节名称更新为"Part A","Part B"等。如果未找到片头(OP),则rename方法会进行其他操作,将片头之前的章节名称更新为"Avant",并将其余章节名称更新为"Part A","Part B"等。
总之,rename方法使用一系列条件判断和循环语句来更新Chapter对象的chapterNames属性,以将片头(OP)和片尾(ED)的章节名称更新为"OP"和"ED",并将其他章节名称更新为"Part A","Part B"等。
当我询问有没有优化的空间时:
在这个代码的当前形式中,没有很多明显的优化空间。
其中一个可能的优化是使用更紧凑的正则表达式来提取文本中的信息。例如,p1和p2正则表达式可以简化为:
p1 = 'CHAPTER([0-9]+)=([0-9]+):([0-9]+):([0-9]+)\.([0-9]+)'
p2 = 'CHAPTER([0-9]+)NAME=(.+)'
可以改为:
p1 = 'CHAPTER(\d+)=(\d+):(\d+):(\d+)\.(\d+)'
p2 = 'CHAPTER(\d+)NAME=(.+)'
这样可以减少代码的字符数,并使代码更易于阅读。
另一个可能的优化是使用列表推导式或生成器表达式来简化某些循环。例如,在rename方法中,以下代码:
for i in range(len(self.chapterNames)-self.OP-2):
self.chapterNames[i+self.OP+1] = 'Part ' + chr(65+i)
可以改为:
self.chapterNames[self.OP+1:len(self.chapterNames)-1] = ['Part ' + chr(65+i) for i in range(len(self.chapterNames)-self.OP-2)]
这样可以避免使用循环,并使代码更易于阅读。
不过,这些优化并不是必需的,因为它们只是在少量情况下带来了微不足道的性能提升。在大多数情况下,这段代码都能够很好地运行。
破事水 希望这个工具还是能有用
因为很多原盘的章节文件里面的名称都是 Chapter 01, Chapter 02 这样,手动改成 Avant, OP, ED, Preview 这些又太麻烦了,因此写了这个工具,希望能有更多 Ripper 们能做好这个处理,也算是提升一点作品质量吧(
|
|