在 python 3.0 中同时读取两个文本文件并提取所需的字符串

Reading two text file simultaneously in python 3.0 and extracting required string

我有两个文本文件,其数据类似于

file_1:

data1 data_1 1
data2 data_2 2
data3 data_2 2 
data2 data_4 1
data3 data_3 1 and so on....

等等

file_2:

data1
data2 
data1
data3
data2

我想得到一个输出

data1:
      > data1 data_1 1
      > data1 data_3 2

data2:
      > data2 data_2 2
      > data2 data_4 1

data3:
      > data3 data_3 1

等等...

我从目前的代码中得到了什么:

data1:
      > data1 data_1 1

data2:
      > data2 data_2 2

data3:
      > data3 data_2 2
      > data2 data_4 1
      > data3 data_3 1

代码:

first_occurance = {}
    with open("folder_1/file_1", "r") as file_1:
        with open("folder_1/file_2", "r") as file_2:
            for line_1,line_2 in zip(file_1, file_2):
                only_command = line_1.split()[0]
                if only_command in line_2:
                    if only_command not in first_occurance:
                        print ("\n   " + only_command + " :\n")
                        print ("      > " + line_1.strip())
                    else:
                        print ("      > " + line_1.strip())
                    first_occurance[only_command] = only_command

但这并不像预期的那样工作,因为数据没有根据标题格式化,例如对应于 data2 的行也显示在 data3 中。任何针对此问题的指导都会非常有帮助....

以下是我认为您可能会尝试做的事情:

from collections import defaultdict

data = """data1 data_1 1
data2 data_2 2
data1 data_3 2
data3 data_4 1
data2 data_3 1"""

commands = """data1
data2
data1
data3
data2"""

store = defaultdict(list)

for line, cmd in zip(data.split('\n'), commands.split('\n')):
    if line.startswith(cmd):
        store[cmd].append(line.strip())

for command in sorted(store):
    print("\n{}:".format(command))
    for l in store[command]:
        print("      >", l)

这会产生以下输出:

data1:
      > data1 data_1 1
      > data1 data_3 2

data2:
      > data2 data_2 2
      > data2 data_3 1

data3:
      > data3 data_4 1

对于命令中的每一行(您从 file_2 中读取的内容),如果数据 (file_1) 中完全相同的行以相同的 "command" 开头,则会将其存储。顺便说一句,您正在大量更改数据,我不确定我们是否理解您在那里想要什么。看来,file_2 甚至没有用,或者您可能想重新对齐数据?

无论如何,在存储分组数据后,您可以按排序顺序打印组(data1、2、3 ...)。您必须存储所有组,否则您将不得不为每个(数据)组一次又一次地读取文件。如果你不这样做,你会得到你当前的输出——因为你在收到数据时就打印了它。

但是,似乎根本不需要您的 file_2 数据,至少根据您在问题中想要的输出是这样。所以这里是产生你想要的输出的文件读取版本;请注意,它不需要读取 file_2:

from collections import defaultdict

store = defaultdict(list)

with open("folder_1/file_1", "r") as data:
    for line in data:
        cmd, content = line.split(' ', 1)
        store[cmd].append(line.strip())

for cmd in sorted(store):
    print("\n{}:".format(cmd))
    for line in store[cmd]:
        print("      >", line)