从文本文件中提取两个分隔符之间的文本

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).

中运行