2009-10-16 3 views
0

У меня есть файл со следующей структурой:Key compare using dictionary

system.action.webMessage = Произошла ошибка во время доступа к сети. system.action.okMessage = Все в порядке. core.alert.inform = Номер ошибки 5512.

Мне нужен скрипт для сравнения ключей в 2 файлах с этой структурой. Я работал в скрипте, чтобы преобразовать файл в словарь и использовать структуру словаря для сравнения ключей (строк до '=') в обоих файлах и сообщает мне значение, из которого ключ равен.

file = open('system.keys','r') 
lines = [] 
for i in file: 
    lines.append(i.split('=')) 

dic = {} 
for k, v in lines: 
    dic[k] = v 

Но я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 

Любой из есть ключ или помочь? :( Я пробовал много вещей, которые я нашел в google, но не нашел решения.

ответ

2
file = open('system.keys','r') 
lines = [] 
for i in file: 
    lines.append(i.partition('=')) 

dic = {} 
for k,_,v in lines: 
    dic[k] = v 

или с помощью расщепленного

myfile = open('system.keys','r') 
dic = dict(i.split("=",1) for i in myfile) 

так dict() знает, как сделать словарь из последовательности (key,value) пара

+0

Thaks man! Оно работает!!! :) – Leonardo

0

Если строка содержит более одного '=', вы получите список из более чем двух элементов, в то время как ваш для цикла (for k, v in items) ожидает, что каждый список будет иметь только два пункта

Попробуйте использовать i.split('=', 1)

. Например:.

>>> "a=b=c".split('=') 
['a', 'b', 'c'] 
>>> "a=b=c".split('=', 1) 
['a', 'b=c'] 
+0

Я получил эту ошибку только в secound «за», когда он пробует преобразовать список в словарь , Оба файла имеют только одну '=' в каждой строке. – Leonardo

+1

@ Leonardo, это потому, что 'lines' имеет элементы с более чем двумя элементами в нем –