我被困在一些python代码上,想知道是否有人可以向我指出正确的方向。我有两个文本文件,其结构如下:
file1
48.1.a 48.1
48.1.b 48.1
48.1.c 48.1
49.1.a 49.1
50.1.a 50.1
50.1.b 50.1
50.1.c 50.1
file2
48.1 info1 info2 info3
49.1 info1 info2 info3
50.1 info1 info2 info3
请注意,我在file1列2中有重复的条目,这些条目与file2列1中的唯一条目相对应。对于file1中的每一行,我想从file2中打印与该行第二列中的值相对应的行。 file1,例如:
48.1 info1 info2 info3
48.1 info1 info2 info3
48.1 info1 info2 info3
49.1 info1 info2 info3
50.1 info1 info2 info3
50.1 info1 info2 info3
我尝试了以下代码,其中包括使用列表保留file1中的重复值:
list=[]
with open("file1.txt") as file1:
for i in file1:
list.append(i.strip().split()[1])
with open("file2.txt") as file2:
for j in list:
for k in file2:
item = k.strip().split()[0]
if item==j:
print(k.strip(), file=output)
由于我嵌套的for循环(这可能也是不好的编码习惯?),以及我如何遍历list中的项目和file2中的行,因此该代码无法提供所需的输出。感谢您的帮助!
答案 0 :(得分:1)
由于file2中的值是唯一的,因此我将它们用作字典中的键,该字典可用于检索所需的信息。
dict_info = {}
with open('file2.txt') as f:
for row in f.readlines():
value, info = row.split()[0], ' '.join([row.split()[i] for i in range(1, 4)])
dict_info[value] = info
with open('file1.txt') as f:
for row in f.readlines():
value = row.split()[1]
print(value, dict_info[value])
答案 1 :(得分:1)
您可以输入使用文件2的第一列作为键,并使用其行作为值。 然后,应该很容易从文件1的第二列访问值。
类似以下代码的东西应该可以工作。
entry_dict = {}
with open('f2.txt') as f2:
lines = f2.readlines()
for line in lines:
l = line.split()
entry_dict[l[0]] = l[1:]
with open('f1.txt') as f1:
lines = f1.readlines()
for line in lines:
item = line.split()[1]
print(' '.join([item] + entry_dict[item]))
答案 2 :(得分:1)
如评论中所述。您可以为文件2中的条目创建字典,然后使用它们根据文件1中的第二列查找条目。
def mkentry(line):
first, rest = line.split(None, 1)
return first, rest.split()
with open("file2.txt") as file2:
mapping = dict(mkentry(line) for line in file2)
with open('file1.txt') as file1:
for line in file1:
col1, col2 = line.split()
if col2 in mapping:
print('%s %s' % (col2, ' '.join(mapping[col2])))
else:
print('%s no entries' % col2)
结果:
48.1 info1 info2 info3
48.1 info1 info2 info3
48.1 info1 info2 info3
49.1 info1 info2 info3
50.1 info1 info2 info3
50.1 info1 info2 info3
50.1 info1 info2 info3