将一本书分解成章节 – Python
Parsing a book into chapters – Python
我有一本大书存储在一个纯文本文件中,我想解析它以便为每一章创建单独的文件。我使用一些简单的正则表达式来查找每一章的标题,但我正在努力捕获其间的所有文本。
import re
txt = open('book.txt', 'r')
for line in txt :
if re.match("^[A-Z]+$", line):
print line,
我知道这是相当初级的,但我是新手 python 这让我有点难过。目前我正在逐行进行,所以我的思考过程是:
- 如果该行是章节标题:创建一个新文件'chapter_title.txt'
- 如果下一行不是章节标题:将此行写入 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")
也许我应该添加一些解释:
with
将自动关闭文件。关闭打开的文件很重要。
readlines()
函数可以按行读取文件并将输出保存到列表中。
这里我用的是f = False
。所以第一次 if f:
将是 False
.
现在这里很重要,如果文件 f
已经打开,那么 if f:
将是 True
并且文件将被 f.close()
关闭(但是第一次 f.close()
不会 运行)。
然后,f = open(line + '.txt', 'w')
将文本写入该文件,当 re.match("^[A-Z]+$", line)
为 True
时,该文件将被关闭,并打开另一个文件,如此反复,直到 txt
列表为空。
或许您也可以尝试以下方法:
import re
with open('book.txt', 'r') as file:
lines = file.read()
contents = re.split("[A-Z]+", lines)
for i in range(1, len(contents), 2):
with open(contents[i] + '.txt', 'w') as file:
file.write(contents[i+1])
本书内容按章节标题拆分。然后将生成的章节内容 (contents[i+1]
) 写入章节文件 (contents[i] + '.txt'
)。
编辑:这假设您有固定的章节标题模式。
您寻求语法方面的帮助。
python 的完整语法在这里https://docs.python.org/2/reference/grammar.html?highlight=grammar。
在此处查看更多冗长的 python 文档 @ https://docs.python.org/2/reference/compound_stmts.html#the-if-statement 阅读复合语句(with、for & if)以更准确地了解语法。
此外,请参阅 https://docs.python.org/2/library/functions.html#open 了解内置函数 open()。
与代码块的缩进保持一致,并记住 :
必须跟在套件之前的每个语句之后。
import re
with open('book.txt', 'r') as corpus:
eye = corpus.readlines()
verdad = False
lambda l: re.match("^[A-Z]+$", l)
for line in eye:
if l(line):
if verdad: verdad.close()
verdad = open(line.replace(' ','_') + '.txt', 'w')
elif ! l(line):
if verdad: verdad.close()
else:
verdad.write(line + "\n")
我有一本大书存储在一个纯文本文件中,我想解析它以便为每一章创建单独的文件。我使用一些简单的正则表达式来查找每一章的标题,但我正在努力捕获其间的所有文本。
import re
txt = open('book.txt', 'r')
for line in txt :
if re.match("^[A-Z]+$", line):
print line,
我知道这是相当初级的,但我是新手 python 这让我有点难过。目前我正在逐行进行,所以我的思考过程是:
- 如果该行是章节标题:创建一个新文件'chapter_title.txt'
- 如果下一行不是章节标题:将此行写入 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")
也许我应该添加一些解释:
with
将自动关闭文件。关闭打开的文件很重要。readlines()
函数可以按行读取文件并将输出保存到列表中。这里我用的是
f = False
。所以第一次if f:
将是False
.
现在这里很重要,如果文件 f
已经打开,那么 if f:
将是 True
并且文件将被 f.close()
关闭(但是第一次 f.close()
不会 运行)。
然后,f = open(line + '.txt', 'w')
将文本写入该文件,当 re.match("^[A-Z]+$", line)
为 True
时,该文件将被关闭,并打开另一个文件,如此反复,直到 txt
列表为空。
或许您也可以尝试以下方法:
import re
with open('book.txt', 'r') as file:
lines = file.read()
contents = re.split("[A-Z]+", lines)
for i in range(1, len(contents), 2):
with open(contents[i] + '.txt', 'w') as file:
file.write(contents[i+1])
本书内容按章节标题拆分。然后将生成的章节内容 (contents[i+1]
) 写入章节文件 (contents[i] + '.txt'
)。
编辑:这假设您有固定的章节标题模式。
您寻求语法方面的帮助。
python 的完整语法在这里https://docs.python.org/2/reference/grammar.html?highlight=grammar。
在此处查看更多冗长的 python 文档 @ https://docs.python.org/2/reference/compound_stmts.html#the-if-statement 阅读复合语句(with、for & if)以更准确地了解语法。
此外,请参阅 https://docs.python.org/2/library/functions.html#open 了解内置函数 open()。
与代码块的缩进保持一致,并记住 :
必须跟在套件之前的每个语句之后。
import re
with open('book.txt', 'r') as corpus:
eye = corpus.readlines()
verdad = False
lambda l: re.match("^[A-Z]+$", l)
for line in eye:
if l(line):
if verdad: verdad.close()
verdad = open(line.replace(' ','_') + '.txt', 'w')
elif ! l(line):
if verdad: verdad.close()
else:
verdad.write(line + "\n")