在Python中查找和合并数据
我有三个文本文件:
- 第一个文件里有很多行,格式是
value1<tab>value2
(大概有600行) - 第二个文件里有更多行,格式是
value2<tab>value3
(大概有1000行) - 第三个文件里也有很多行,格式是
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
你可能想要根据自己的需要来调整一下,这样可以改变输出的格式。