Python 将文本文件中的数据提取为数组

Python 将文本文件中的数据提取为数组,python,arrays,oop,text-files,text-extraction,Python,Arrays,Oop,Text Files,Text Extraction,我试图从文本文件中提取特定的数据字符串。 我使用的代码如下。我想从该文本文件中读取特定的stringall操作,然后将其存储在数组或列表中(如果找到)。然后按相同的顺序显示 import string solution_path = "/homer/my_dir/solution_detail.txt" solution = open(solution_path).read() all_actions = ['company_name','email_address','full_name

我试图从文本文件中提取特定的数据字符串。 我使用的代码如下。我想从该文本文件中读取特定的stringall操作,然后将其存储在数组或列表中(如果找到)。然后按相同的顺序显示

import string 

solution_path = "/homer/my_dir/solution_detail.txt"
solution = open(solution_path).read()

all_actions = ['company_name','email_address','full_name']
n = 0
sequence_array = []
for line in solution:
            for action in all_actions:
                    if action in line:
                        sequence_array[n] = action
                        n = n+1
for x in range(len(sequence_array)):
            print (sequence_array[x])

但是这段代码什么也不做,只是运行时没有任何错误。

发生的是解决方案包含文件中的所有文本。所以,当您在解决方案中对行进行迭代时,实际上是分别对每个字符进行迭代,这就是为什么您从未获得任何命中率

请尝试以下代码,我无法测试它,因为我没有您的文件

solution_path = "/homer/my_dir/solution_detail.txt"
all_actions = ['company_name','email_address','full_name']


sequence_array = []
with open(solution_path, 'r') as f:
    for line in f.readlines():
        for action in all_actions:
            if action in line:
                sequence_array.append(action)
这将收集文档中的所有操作。如果你想把它们全部打印出来

for action in sequence_array:
    print(action)

代码存在多个问题

.read在文件上生成单个字符串。因此,对于解决方案中的行:迭代文件文本的每个字符,而不是每行。如果你认为名称行是特殊的,那么名称行并不特殊。迭代只取决于所迭代的内容。从文件中获取行的自然方式是在文件打开时循环文件本身。为了保持文件打开并确保其正确关闭,我们使用with块

除非列表长度至少为n+1个元素,否则不能简单地分配给序列_数组[n]。您没有从中得到错误的原因是因为如果line:中的操作永远不为真,因为第一点。幸运的是,我们可以简单地将.append添加到列表的末尾

若该行包含所有_操作中的多个,它将被存储多次。这可能不是你想要的。内置的any函数更容易处理这个问题;我们可以为它提供一个优雅的解决方案。但是如果你的具体需求不同,那么当然有不同的方法

虽然最后一个循环在理论上是可以的,但它是直接循环的,就像您尝试循环解决方案一样。但是我们不需要建立一个列表,我们可以只打印结果

例如:

with open(solution_path) as solution:
    for line in solution:
        if any(action in line for action in all_actions):
            print(line)

非常感谢您的详细解释和澄清。您的代码也可以完美地工作。