2017-10-15 9 views
-2

これでファイルを正しく読み込むことができなくなりました。実際にロードするには、常に1つの値しか保持しません。すべての値。このファイルを正しくロードするにはどうすればいいですか?(python 2.7)

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

保存機能以下のロード機能は、ちょうどすべての「通常」「辞書を埋めるために仮定」と持っているように私は

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() 

(私の質問からコードを得ました)その作業罰金を推測キーと値をファイルに保存する前の状態に戻します。コップ;警察署長、それはこの

911のように見えるファイルで

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 

912;消防士;火災シェフ;

ロード時にどのように分割されるかが問題です。

+0

代わりにpickleを使用してください。 https://docs.python.org/2/library/pickle.html – FredMan

+0

@FredMan pickeは使用できません。それがあればそれをしただろう。 – noname292123

+0

私たちのために保存されたファイルの内容を猫のように(または他の方法で)表示して、あなたの得点がどういうものか、またはあなたが読み込み機能を使っているかを説明してください。 – FredMan

答えて

0

「;」で分割しているようです。あなたが2つの ";"あなたの保存機能で。

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

";"あなたの保存機能で。

E.G.

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

ええ、ファイルを保存しようとするとコードクラッシュを起こしてしまった。 – noname292123

+0

どのようなエラーメッセージが表示されましたか? str.join()関数を使う代わりに+ ";" + b + "\ n"を試すことができます。 – FredMan

関連する問題