在python3.0中同时读取两个文本文件并提取所需字符串

2024-04-26 11:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

文件1:

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

等等

文件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。对这个问题的任何指导都会非常有帮助。。。。你知道吗


Tags: 文件数据代码inonlydatalinecommand
1条回答
网友
1楼 · 发布于 2024-04-26 11:14:14

以下是我认为你可能要做的:

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”开头,则存储该行。顺便说一句,你改变了很多数据,我不知道我们了解你想要什么。似乎,文件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)

相关问题 更多 >