Поиск и объединение данных в Python - PullRequest
1 голос
/ 17 июня 2009

У меня есть 3 текстовых файла

  1. много строк value1<tab>value2 (может быть, 600)
  2. намного больше строк value2<tab>value3 (может быть, 1000)
  3. намного больше строк value2<tab>value4 (возможно, 2000)

Не все строки совпадают, в некоторых пропущено одно или несколько значений. Я хочу взять файл 1, прочитать его и найти соответствующие значения в файлах 2 и 3, и записать вывод как - например

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

т.е. указать, что значение отсутствует, напечатав немного текста

в awk я могу НАЧАТЬ, прочитав файлы в массивы, затем END и пройти через них. Но я хочу использовать Python (3) для переносимости. Я делаю это на компьютере с использованием MS Access и связывания таблиц, но каждый раз, когда я использую этот метод, существует штраф времени.

Все попытки понять это в словарях или списках смутили меня. Теперь у меня, кажется, есть все книги о Питоне!

Большое спасибо всем, кто может дать совет. (если интересно, это arp, mac и коды вендоров)

Ответы [ 2 ]

5 голосов
/ 17 июня 2009

Непроверенные:

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 голосов
/ 17 июня 2009

Начните с этого.

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

Вы можете настроить его для изменения форматирования вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...