我目前正在写有关CEO自恋的硕士论文。为了对其进行衡量,我必须进行收入电话文本分析。我按照this link中提供的答案用python写了一个代码,该代码使我能够从收入电话记录中提取“问题与答案”部分。该文件就是这样的(它称为“ testoestratto.txt”):
..............................
Delimiter [1]
..............................
A text that I don't need
..............................
Delimiter CEO [2]
..............................
I need this text
..............................
Delimiter [3]
..............................
[...]
..............................
Delimiter CEO [n-1]
..............................
I also need this text
..............................
Delimiter [n]
..............................
我还有另一个txt文件(“ lista.txt”),在其中我从笔录中提取了所有定界符:
Delimiter [1]
Delimiter CEO [2]
Delimiter [3]
[...]
Delimiter CEO [n-1]
Delimiter [n]
我想做的是从Delimiter CEO [2]与Delimiter [3]之间,...以及Delimiter CEO [n-1]与Delimiter [之间]的'testoestratto.txt'中提取文本。 n]。提取的文本必须写在“ test.txt”中。因此,如果“ lista.txt”中的分隔符包含“ CEO”一词,那么我需要来自“ testoestratto.txt”中的文本,该文本位于该特定分隔符与“ lista.txt”中下一个不包含“首席执行官”。为此,我编写了以下代码:
with open('testoestratto.txt','r', encoding='UTF-8') as infile, open('test.txt','a', encoding='UTF-8') as outfile, open('lista.txt', 'r', encoding='UTF-8') as mylist:
text= mylist.readlines()
text= [frase.strip('\n') for frase in text]
bucket=[]
copy = False
for i in range(len(text)):
for line in infile:
if line.strip()==text[i] and text[i].count('CEO')!=0 and text[i].count('CEO')!= -1:
copy=True
elif line.strip()== text[i+1] and text[i+1].count('CEO')==0 or text[i+1].count('CEO')==-1:
for strings in bucket:
outfile.write(strings + '\n')
elif copy:
bucket.append(line.strip())
但是,“ test.txt”文件为空。你能帮我吗?
P.S。 :我是python的初学者,所以如果代码混乱,我想道歉
答案 0 :(得分:0)
您需要在代码中进行一些更改。
首先,这里的关键是在每次读取一次文件之后将其重置为文件的开头。由于尚未执行此操作,因此在嵌套for循环的第一次迭代之后,您的代码从不从头开始读取文件。
您可以使用infile.seek(0)
来做到这一点。
第二,完成写入文件后,您需要将标志“ copy”的值重置为False。这样可以确保您不会将不需要的文本写到文件中。此外,您还需要清空存储区,以避免在输出中多次写入相同的行。
第三,您在elif
语句中包含了许多不必要的字符串检查。
我已在以下代码中进行了更改:
with open('testoestratto.txt','r', encoding='UTF-8') as infile,
open('test.txt','a', encoding='UTF-8') as outfile, open('lista.txt', 'r',
encoding='UTF-8') as mylist:
text= mylist.readlines()
text= [frase.strip('\n') for frase in text]
bucket=[]
copy = False
for i in range(len(text)):
for line in infile:
if line.strip('\n')==text[i] and text[i].count('CEO') > 0:
copy=True
elif copy and line.strip('\n') == text[i+1]:
for strings in bucket:
outfile.write(strings + '\n')
copy = False
bucket = list()
elif copy:
bucket.append(line.strip())
infile.seek(0)
话虽如此,您还可以优化代码。如您所见,此代码在O(n ^ 3)中运行。