在Python中查找和合并数据

1 投票
2 回答
790 浏览
提问于 2025-04-15 12:18

我有三个文本文件:

  1. 第一个文件里有很多行,格式是 value1<tab>value2(大概有600行)
  2. 第二个文件里有更多行,格式是 value2<tab>value3(大概有1000行)
  3. 第三个文件里也有很多行,格式是 value2<tab>value4(大概有2000行)

这些行并不是完全匹配的,有些行可能缺少一个或多个值。我想从第一个文件开始,逐行读取,然后在第二个和第三个文件中查找对应的值,最后把结果写出来,比如:

value1<tab>value2<tab>value3<tab>value4
value1<tab>value2<tab>blank <tab>value4

也就是说,如果某个值缺失,就打印一些文字来表示。

在awk中,我可以先把文件读到数组里,然后再逐步处理。但我想用Python(3)来做,这样更方便。我是在电脑上用MS Access来链接表格,但每次用这种方法都会有时间上的损失。

我尝试用字典或列表来理解这一切,但让我感到很困惑。现在我似乎已经买了所有的Python书!

非常感谢任何能提供建议的人。(如果感兴趣的话,这涉及到arp、mac和厂商代码)

2 个回答

5

未经测试:

f1 = open("file1.txt")
f2 = open("file2.txt")
f3 = open("file3.txt")

v1 = [line.split() for line in f1]
# dict comprehensions following, these need Python 3
v2 = {vals[0]:vals[1] for vals in line.split() for line in f2}
v3 = {vals[0]:vals[1] for vals in line.split() for line in f3}

for v in v1:
  print( v[0] + "\t" + v[1] + "\t" + v2.get(v[1],"blank ") + "\t" + v3.get(v[1],"blank ") )
3

从这个开始。

def loadDictionaryFromAFile( aFile ):
    dictionary = {}
    for line in aFile:
        fields = line.split('\t')
        dictionary[fields[0]]= fields

dict2 = loadDictionaryFromAFile( open("file2","r" )
dict3 = loadDictionaryFromAFile( open("file3","r" )

for line in open("file1","r"):
    fields = line.split("/t")
    d2= dict2.get( fields[0], None )
    d3= dict3.get( fields[0], None )
    print fields, d2, d3

你可能想要根据自己的需要来调整一下,这样可以改变输出的格式。

撰写回答