在Python中查找并组合数据

时间:2009-06-17 17:49:10

标签: python string file

我有3个文本文件

  1. 许多行value1<tab>value2(可能是600)
  2. 更多行value2<tab>value3(可能是1000)
  3. 更多行value2<tab>value4(可能是2000年)
  4. 并非所有行都匹配,有些行会丢失一个或多个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和供应商代码)

2 个答案:

答案 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

您可能想要自定义它以更改输出的格式。