从文本文件中提取两个分隔符之间的文本
Extract text between two delimiters from a text file
我目前正在写关于 CEO 自恋的硕士论文。为了衡量它,我必须进行收益电话文本分析。我在 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] 和之间的 'testoestratto.txt' 中提取文本定界符 [n]。提取的文本必须写在 'test.txt' 中。因此,如果来自 'lista.txt' 的定界符包含 CEO 这个词,我需要来自 'testoestratto.txt' 的文本,该文本位于该特定定界符和来自 'lista.txt' 的下一个没有词 'lista.txt' 的定界符之间=31=] 在里面。为此,我编写了以下代码:
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,代码乱七八糟还请见谅
您需要在代码中更改一些内容。
首先,这里的关键是在每次迭代读取一次后将行重置回文件的开头。由于您还没有这样做,因此您的代码永远不会在嵌套 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).
中运行
我目前正在写关于 CEO 自恋的硕士论文。为了衡量它,我必须进行收益电话文本分析。我在 python 中编写了一个代码,遵循
..............................
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] 和之间的 'testoestratto.txt' 中提取文本定界符 [n]。提取的文本必须写在 'test.txt' 中。因此,如果来自 'lista.txt' 的定界符包含 CEO 这个词,我需要来自 'testoestratto.txt' 的文本,该文本位于该特定定界符和来自 'lista.txt' 的下一个没有词 'lista.txt' 的定界符之间=31=] 在里面。为此,我编写了以下代码:
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,代码乱七八糟还请见谅
您需要在代码中更改一些内容。
首先,这里的关键是在每次迭代读取一次后将行重置回文件的开头。由于您还没有这样做,因此您的代码永远不会在嵌套 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).
中运行