2017-10-15 18 views
-2

이제는 파일을 올바르게로드 할 수 없다는 문제가 있습니다 ...로드 할 때 항상 값 하나만 유지하면됩니다. 모든 값.적절하게이 파일을 적절하게로드 하시겠습니까? (파이썬 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

대신에 피클을 사용하십시오. https://docs.python.org/2/library/pickle.html – FredMan

+0

@FredMan picke는 사용할 수 없습니다. 그것이 있었다면 그것을했을 것입니다. – noname292123

+0

우리에게 저장된 파일의 내용을 고양이에게 보여 주거나 보여 주며, 당신이 얻는 오류가 무엇인지,로드 기능을 통해 얻고있는 결과를 설명하십시오. – FredMan

답변

0

";" 로드가 두 개가됩니다. ";" 귀하의 저장 기능에.

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