我有3个文本文件
value1<tab>value2
(可能是600)value2<tab>value3
(可能是1000)value2<tab>value4
(可能是2000年)并非所有行都匹配,有些行会丢失一个或多个val。我想获取文件1,读取它并在文件2和文件中查找相应的值。 3,并将输出写为 - 例如
value1<tab>value2<tab>value3<tab>value4
value1<tab>value2<tab>blank <tab>value4
即。通过打印一些文本
表示缺少该值在awk中我可以通过将文件读入前面的数组然后结束END并逐步执行它们来开始。但是我想使用Python(3)来实现可移植性。我是在使用MS Access和链接表的PC上完成的,但每次使用此方法都会有时间损失。
所有在字典或列表中理解这一点的努力都让我感到困惑。我现在似乎有每本Python书!
非常感谢能够提供建议的任何人。 (如果感兴趣,它是arp,mac和供应商代码)
答案 0 :(得分: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 ") )
答案 1 :(得分: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
您可能想要自定义它以更改输出的格式。