更快地匹配文本文件中的id并检索相应的值

时间:2017-03-10 15:18:40

标签: python algorithm search

我有两个文本文件,第一个的简化版本如下所示:

enter image description here

第一个字段(字母)是唯一值,第二个字段(数字)不是唯一的。该文件有7行,真实文件有超过一百万行。第二个文件如下所示:

enter image description here

它有一个字段,就像第一个文件一样,它是唯一的。第二个文件中的所有值都在第一个文件中,但反之亦然。所以第二个文件的条目较少。它也没有第二个字段(数字)!

我的问题是:将第二个文件中的值与第一个文件的值匹配并找到相应的数字的最快方法是什么?所以我的目标是得到这个:

enter image description here

这就是我现在正在做的事情:

with open("file_2") as f2:  
    for l in f2:
        with open("file_1") as f1:
            for line in f1:
                if l["letter"] == line["letter"]:
                    print(line["number"])

但这种方法需要几天时间,有更快的方法吗?我已经阅读了有关集合但是用于检查字母是否在文件中,然后我无法检索该数字。

1 个答案:

答案 0 :(得分:1)

我认为您多次读取file_1(它是file_2的行数)

我认为你最好只读一次file_1。

使用file_2

中的键(字母)过滤file_1的数据
def parse(line):
  # DO SOMETHING
  return (letter, number)
def getletter(line):
  # DO SOMETHING
  return letter

with open("file_2") as f2:
  letters = map(getletter, f2.readlines)
  with open("file_1") as f1:
    letter_number = map(parse, f1.readlines)
    result = list(filter(lambda x: x[0] in letters, letter_number))
    # result is (letter, number) entries