python - 将一本书解析成章节——Python

标签 python regex parsing text-analysis

我有一本大书存储在一个纯文本文件中,我想解析它以便为每一章创建单独的文件。我使用了一些简单的正则表达式来查找每一章的标题,但我正在努力捕获其间的所有文本。

import re

txt = open('book.txt', 'r')

for line in txt :
    if re.match("^[A-Z]+$", line):
        print line,

我知道这是相当初级的,但我对 python 还很陌生,这让我有点难过。目前我正在逐行进行,所以我的思考过程是:

  1. 如果该行是章节标题:创建一个新文件“chapter_title.txt”
  2. 如果下一行不是章节标题:将此行写入 chapter_title.txt

不过,我尝试将其实际写出来的尝试不太成功。感谢您的帮助!

编辑:具体来说,我对文件 I/O 的 Python 语法感到困惑。我试过:

for line in txt :
    if re.match("^[A-Z]+$", line):
        f = open(line + '.txt', 'w')
    else f.write(line + "\n")

作为我的一般方法,但这不会像书面那样起作用。希望帮助构建循环。谢谢

最佳答案

我认为这会起作用:

import re

with open('book.txt', 'r') as file:
    txt = file.readlines()

f = False

for line in txt:
    if re.match("^[A-Z]+$", line):
        if f: f.close()
        f = open(line + '.txt', 'w')

    else:
        f.write(line + "\n")

也许我应该添加一些解释:

  1. with 将自动关闭文件。关闭打开的文件很重要。

  2. readlines() 函数可以按行读取文件并将输出保存到列表中。

  3. 这里我使用的是 f = False。所以第一次 if f: 将是 False

现在这里很重要,如果文件 f 已经打开,那么 if f: 将为 True 并且文件将被关闭通过 f.close()(但第一次 f.close() 不会运行)。

然后,当 re.match("^[A-Z]+$ ", line)True 文件将被关闭,并打开另一个文件,如此反复,直到 txt 列表为空。

关于python - 将一本书解析成章节——Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33207620/

相关文章:

bash - 如何汇总字符串中的数字并生成单个汇总字符串

Python 3 : Parallel diagonalization of multiple matrices

php - 正则表达式的问题应该只匹配行首或匹配太少

python - 使用正则表达式从文本中提取帮助

javascript - 指定 JavaScript 正则表达式中的模式重复次数

java - 允许用户指定输出格式的最简单方法

parsing - 语法左因式分解

python - 是否可以在 keras 中实现动态类权重?

python - 如何从 Heroku iPython 上的剪贴板粘贴?

java - python有自动资源管理吗?