2009-10-16 7 views
0

J'ai un fichier avec la structure suivante:Key comparer en utilisant le dictionnaire

system.action.webMessage = Une erreur est arrivé lors de l'accès Web. system.action.okMessage = Tout va bien. core.alert.inform = Erreur numéro 5512.

J'ai besoin d'un script pour comparer les clés dans 2 fichiers avec cette structure. Je travaillais dans un script pour convertir le fichier dans un dictionnaire et utiliser la structure du dictionnaire pour comparer les clés (chaînes avant '=') dans les deux fichiers et me dit avec la valeur de quelle touche est égale.

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

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

Mais je reçois l'erreur suivante:

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

Quelqu'un a une idée ou d'aide? :( J'ai essayé beaucoup de choses que j'ai trouvé dans google mais pas de solution

Répondre

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

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

ou utilisez le partage

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

depuis dict() sait comment faire un dictionnaire à partir d'une séquence de (key,value) paires

+0

Thaks man! Ça marche!!! :) – Leonardo

0

Si une ligne contient plus d'un '=', vous obtiendrez une liste avec plus de deux éléments, tandis que votre boucle for (for k, v in items) prévoit que chaque liste aura seulement deux articles

Essayez d'utiliser i.split('=', 1)

par exemple:..

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

Je suis arrivé cette erreur que dans le secound « pour », quand il essaye de convertir la liste dans un dictionnaire . Les deux fichiers ont seulement un '=' dans chaque ligne. – Leonardo

+1

@Leonardo, c'est parce que 'lines' a des éléments avec plus de 2 éléments –