2017-10-15 26 views
-2

Ok maintenant le problème est que je ne peux pas charger correctement le fichier comme il se doit ... Quand je l'obtiens à charger réellement il conserve toujours une valeur et non toutes les valeurs.Correctement faire ce chargement de fichier correctement (python 2.7)

lista = {'Cop': '911', 'Police chief': '911' 
     , 'firemen' : '912', 'fire chef' : '912' 
     ,} 

fonction Enregistrer Je suppose que fin de travail (a le code de ma question)

def save(lista): 
    spara = lista 
    from collections import defaultdict 
    d = defaultdict(list) 
    fil = open("test" + ".txt","w") 

    for a, b in lista.items(): 
     d[b].append(a) 

    for a, b in d.items(): 
     fil.write(a+';'+';'.join(b)+"\n") 


    fil.close() 

Comme la fonction de charge est supposé juste en dessous pour remplir le dictionnaire « » normalement « » et ont tous les les clés et les valeurs telles qu'elles étaient avant de les enregistrer dans le fichier.

def load(lista): 
     ladda = open("test" + ".txt","r") 
     for namesandnumbers in ladda: 
      (key,val) = namesandnumbers.split(";") 
      lista[(val)] = key[:len(key)] 
      lista = ladda 
      return lista 
while True: 
choice = input(" 1 add to list 2 to save 3 to load ") 
if choice == 1: 
    word = raw_input("Type the key: ") 
    word2 = raw_input("Type the value: ") 
    lista[word] = word2 
    print lista 
    continue 
if choice == 2: 
    save(lista) 
elif choice == 3: 
    load(lista) 
elif choice == 4: 
    False 

Dans le fichier, il ressemble à ce

911, Cop, chef de la police;

912 pompiers, chef des pompiers;

Le problème est de savoir comment il se divise lors du chargement.

+0

Utilisez plutôt le pickle. https://docs.python.org/2/library/pickle.html – FredMan

+0

@FredMan picke n'est pas autorisé à être utilisé. l'aurait fait si c'était le cas. – noname292123

+0

chat (ou autrement montrer) le contenu du fichier sauvegardé pour nous, et expliquer quelle est l'erreur que vous obtenez ou la sortie que vous obtenez avec la fonction de chargement. – FredMan

Répondre

0

Il semble que vous partagiez ";" en charge mais vous mettez en deux ";" dans votre fonction de sauvegarde.

example = "key;;value" 
    example.split(";") 
    ['key', '', 'value'] 

supprimer l'un des ";" dans votre fonction de sauvegarde.

E.G.

fil.write(a+';'+';'.join(b)+"\n") ===== >  fil.write(';'.join((a,b))+"\n") 
+0

Ouais n'a pas vraiment fait grand-chose du tout cela a fait planter le code en essayant de sauver le fichier .... bien merci d'essayer l'homme. – noname292123

+0

Quel message d'erreur avez-vous reçu? vous pouvez essayer + ";" + b + "\ n" au lieu d'utiliser la fonction str.join(). – FredMan