Поиск и объединение данных в Python

1

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

  • много строк value1<tab>value2 (возможно, 600)
  • еще много строк value2<tab>value3 (возможно, 1000)
  • еще много строк value2<tab>value4 (может быть, 2000)

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

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

то есть. укажите, что значение отсутствует при печати небольшого текста

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

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

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

  • 1
    Я думаю, что примеры АКТУАЛЬНОГО ввода и вывода здесь были бы полезны.
  • 0
    Спасибо за ответы, пока они не работают (я никогда не ожидал окончательного кода), вы оба дали мне подсказки, которые мне нужны. Кронштейны для печати заявления застали меня. Реальный ввод / вывод f1 = nx строк интерфейса mac-адреса от устройства L2 f2 = nx строк ip-адреса mac-адреса от устройства L3 f3 = nx строк поставщика mac OUI от IEEE Выходной IP-адрес интерфейса поставщика mac-адреса для каждого активного адреса
Показать ещё 3 комментария
Теги:
string
file

2 ответа

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

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

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 ") )
  • 0
    +1 Питонические решения выглядят так красиво
  • 1
    Проклятье. Эти диктовки так хороши. Однажды cherrypy, mako, django, beautfiulsoup, twisted, numpy, nltk и др. стандартизировать на Python 3 я там ТАК.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню