我有一本大型书籍存储在一个纯文本文件中,并且想要解析它以便为每一章创建单独的文件。我找到了每个章节标题的一些简单的正则表达式,但我正在努力捕捉它们之间的所有文本。
import re
txt = open('book.txt', 'r')
for line in txt :
if re.match("^[A-Z]+$", line):
print line,
我知道这是相当简陋的,但我已经足够蟒蛇了,它让我有点难过。目前我一行一行,所以我的思考过程是:
我尝试实际写出来的尝试虽然不太成功。感谢帮助!
编辑:具体来说,我对文件I / O的Python语法感到困惑。我试过了:
for line in txt :
if re.match("^[A-Z]+$", line):
f = open(line + '.txt', 'w')
else f.write(line + "\n")
作为我的一般方法,但这不会像书面那样工作。希望有助于构建循环。感谢
答案 0 :(得分:1)
我认为这会奏效:
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
文件将被关闭时,打开另一个文件,再次,再次{{1}列表为空。
答案 1 :(得分:1)
也许您也可以尝试以下方法:
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'
)。
编辑:这假定你有章节标题的固定模式。
答案 2 :(得分:-1)
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")