我有两个单独的记录。一个只有一个列有名称,第二个列有两列,一列有相同的名称列表,另一列有ID。第一个记录中的名称是唯一的,但在第二个记录中它们是重复的; ID是唯一的。我想使用Name列将一个列表与另一个列表匹配,并在名称相同时将ID附加到同一行。
FILE1
mystring = 'abccd'
m = re.match(r'.*(\w)\1', mystring)
print m.group(1) # 'c'
FILE2
Name1
Name2
Name3
Name4
Name5
输出
Name1 ID001
Name1 ID002
Name2 ID003
Name3 ID004
Name4 ID005
Name4 ID006
Name4 ID007
Name5 ID008
这是我到目前为止所做的:
Name1 ID001 ID002
Name2 ID003
Name3 ID004
Name4 ID005 ID006 ID007
Name5 ID008
但输出只是最后一条记录:
f1 = open('Test1.txt')
for line1 in f1:
f2 = open('Test2.txt')
for line2 in f2:
line3 = f2.split(' ')
if line1 == line3[0]:
print(line3[1])
答案 0 :(得分:0)
您可以将内容存储在dict
中,然后遍历dict
并在构建后打印内容。在这种情况下,读取文件内容的方式假设文本文件中每行之间没有空行:
names = dict()
with open('Test1.txt') as f1:
for line in f1:
names[line.strip("\n")] = list()
with open('Test2.txt') as f2:
for line in f2:
name, id = line.strip("\n").split(' ')
names[name].append(id)
print names
结果将是:
{'Name4': ['ID005', 'ID006', 'ID007'], 'Name5': ['ID008'], 'Name2': ['ID003'], 'Name3': ['ID004'], 'Name1': ['ID001', 'ID002']}
答案 1 :(得分:0)
对于此输入为Test1.txt:
Name1
Name2
Name3
Name4
Name5
此输入为Test2.txt:
Name1 ID001
Name1 ID002
Name2 ID003
Name3 ID004
Name4 ID005
Name4 ID006
Name4 ID007
Name5 ID008
此代码:
f1 = open('Test1.txt')
for line1 in f1:
line1 = line1.strip()
print(line1, end=" ")
f2 = open('Test2.txt')
for line2 in f2:
line2 = line2.strip()
line3 = line2.split(' ')
if line1 == line3[0]:
print(line3[1], end=" ")
print()
生成此输出:
Name1 ID001 ID002
Name2 ID003
Name3 ID004
Name4 ID005 ID006 ID007
Name5 ID008
请注意使用strip
来使等式生效。
答案 2 :(得分:-1)
首先,在循环中打开文件的原因是什么。之前打开它。其次,print语句与预期输出不匹配。此外,您在文件而不是行上应用拆分。以下是如何解决它的建议:
# test file1
f1 = ["Name1","Name2","Name3","Name4","Name5"]
# test file2
f2= ["Name1 ID001","Name1 ID002","Name2 ID003",
"Name3 ID004","Name4 ID005","Name4 ID006",
"Name4 ID007","Name5 ID008"]
output = {}
for line1 in f1:
output[line1] = []
for line2 in f2:
line3 = line2.split(' ')
if line1 == line3[0]:
output[line1].append(line3[1])
"""
expected output: {'Name1': ['ID001', 'ID002'], 'Name2': ['ID003'], 'Name3': ['ID004'], 'Name4': ['ID005', 'ID006', 'ID007'], 'Name5': ['ID008']}
"""
print output