使用Python实现读取TXT小说文件按每一回显示打印出来

使用Python实现读取TXT小说文件按每一回显示打印出来
最新回答
槐序廿柒

2023-05-11 17:50:23

要实现读取TXT小说文件并按每一回显示打印出来,我们可以使用Python的正则表达式来匹配每一回的内容。以下是详细的实现步骤和代码示例:

  1. 读取文件内容:使用Python内置的open函数读取TXT文件内容。
  2. 使用正则表达式匹配每一回:根据小说中每一回的标题格式(如“第一回”、“第二回”等),编写正则表达式来匹配每一回的内容。
  3. 打印每一回的内容:遍历匹配到的每一回内容,并打印出来。

以下是具体的代码实现:

import redef read_novel_by_chapter(file_path): # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as file: text = file.read() # 定义正则表达式模式,匹配每一回的标题和内容 # 假设每一回的标题格式为“第X回 ...”,后面跟着该回的内容,直到下一个标题或文件结束 pattern = re.compile(r'第[一二三四五六七八九十百]+回s+[^n]+n(.*?)(?=第[一二三四五六七八九十百]+回s+[^n]+n|Z)', re.DOTALL) # 查找所有匹配的章节 chapters = pattern.findall(text) # 打印每一回的内容 for i, chapter in enumerate(chapters, 1): print(f"n=== 第{i}回 ===") print(chapter.strip()) # 去除首尾空白字符# 调用函数,传入小说文件的路径read_novel_by_chapter('西游记.txt')代码说明:
  • 正则表达式模式:r'第[一二三四五六七八九十百]+回s+[^n]+n(.*?)(?=第[一二三四五六七八九十百]+回s+[^n]+n|Z)'

    第[一二三四五六七八九十百]+回:匹配“第一回”、“第二回”等标题。

    s+[^n]+n:匹配标题后的内容,直到换行符。

    (.*?):非贪婪匹配,匹配该回的内容,直到下一个标题或文件结束。

    (?=第[一二三四五六七八九十百]+回s+[^n]+n|Z):正向预查,确保匹配到下一个标题或文件结束。

  • re.DOTALL:使.匹配包括换行符在内的所有字符,以便匹配多行内容。
  • enumerate:用于在打印时显示回目编号。
示例输出:

假设小说文件内容如下:

第一回 灵根育孕源流出 心性修持大道生话说...第二回 悟彻菩提真妙理 断魔归本合元神却说...

运行上述代码后,输出将类似于:

=== 第1回 ===话说...=== 第2回 ===却说...注意事项:
  1. 文件编码:确保文件编码与open函数中指定的编码一致(如utf-8)。
  2. 正则表达式调整:如果小说文件的回目格式与示例不同,需要调整正则表达式以适应实际格式。
  3. 性能优化:对于非常大的文件,可以考虑逐行读取并处理,而不是一次性读取整个文件。

通过这种方法,你可以灵活地按回目读取并打印小说内容。