这是我的问题,我有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语句中的元素解包功能,将每行的第一项和第二项解包为xy值,以插入到字典中。

    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))

09-05 19:14