У меня есть 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 и коды поставщиков)
Начните с этого.
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
Вы можете настроить его для изменения форматирования вывода.
Непроверенные:
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 ") )