把一本书分成几章–;python
我有一本大书存储在一个纯文本文件中,我想对它进行解析,以便为每个章节创建单独的文件。我找到了一些简单的正则表达式,可以找到每一章的标题,但我很难捕捉其中的所有文本把一本书分成几章–;python,python,regex,parsing,text-analysis,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还不够熟悉,所以它让我有点困惑。目前我正在一行一行地思考,所以我的思
import re
txt = open('book.txt', 'r')
for line in txt :
if re.match("^[A-Z]+$", line):
print line,
我知道这是相当初级的,但我对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
。所以第一次如果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的完整语法在这里
在这里查看更多冗长的python文档@阅读复合语句(with、for和if),以便更准确地了解语法
另外,请参阅以了解内置函数open()
与代码块的缩进保持一致,并记住a:
在组曲前必须遵循每一句话
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")
问题到底是什么?看起来你的方向是对的。基本上我在寻求语法方面的帮助。这个结构对我来说很有意义,但我正在努力处理我需要的文件/O@gweintraub嗯……你怎么知道这行是不是一个章节?你能从输入文件中发布一些文本吗?@KevinGuan My regex找到章节标题。它们的格式都是大写的,并且它们自己在一行上。这部分代码肯定能用。@gweintraub我刚刚添加了一些解释。也许你想看看:)我得到的是AttributeError:'bool'对象没有属性“write”
,我认为这很有意义。。是虫子吗?(当然是最后一行引起的错误…)