这是我的问题,我有2个文件,我想在其中读取和打印lines.append():
文件1:
ID1 desc1
ID2 desc2
ID3 desc3
ID4 desc4
档案2:
ID1 random1
ID5 random5
ID6 random6
我想得到的是:
ID1 random1 desc1
ID5 random5 desc5
ID6 randomI nothing
但是,我当前的代码:
address = {}
with open('address.txt', 'r') as f:
rows = (line.rstrip().split('\t') for line in f)
address = { row[0]:row[1:] for row in rows }
for key, value in address.items():
with open('families.txt', 'r') as f:
for line in f.readlines():
line = line.rstrip('\n')
line = line.split('\t')
if line[0] == key:
line.append(str(address[key]))
print ('\t'.join(line))
else:
line.append('nothing')
print ('\t'.join(line))
但是,我得到一个循环
ID1 random1 desc1
ID5 random5 nothing
ID6 randomI nothing
ID1 random1 nothing
ID5 random5 desc5
ID6 random6 nothing
同样,如果有人可以建议最好的方法来丢弃方括号,那将是最好的方法,方括号是我字典的“值”的一部分。
最佳答案
我删除了一些不必要的项目,并希望清理一些内容。
我删除了对'\n'
和'\t'
的引用,因为.rstrip()
和.split()
方法默认情况下会自动处理这些字符。
with open('address.txt', 'r') as f:
rows = [line.rstrip().split() for line in f]
我利用了for语句中的元素解包功能,将每行的第一项和第二项解包为
x
和y
值,以插入到字典中。 address = { x: y for x, y in rows }
with open('families.txt', 'r') as f:
for line in f.readlines():
line = line.rstrip().split()
在这种情况下,不需要遍历Family文件中的行以及地址字典中的项目。字典针对查找键进行了优化,因此我们可以轻松遍历Family文件并在字典中进行查找。
if line[0] in address:
line.append(str(address[line[0]]))
print('\t'.join(line))
else:
line.append('nothing')
print('\t'.join(line))