2017-05-14 5 views
0

2番目のループで問題なくファイルを反復して書き込むことができます。私はここで辞書、Pythonから値を取得しようとしたときにkeyError

R.write(str(dictList[s])+'\n') 
KeyError: '<http://www.Department17.University9.edu/GraduateStudent72>' 

を取得した値をコールしようとすると、しかし、第3のループ内のコードは次のとおりです。

f = open('advisor', 'rw') 
e = open('dictionary.txt', 'rw') 
R = open ('encodedAdvisor.txt', 'w') 

import re 

dictList={'key':'val'} 
for line1 in e: 
    kv=line1.split(',') 
    key=str(kv[1]) 
    val=str(kv[0]) 
    dictList.update({key:val}) 
for k, v in dictList.iteritems(): 
    R.write(str(k)+':'+v+':'+'\n') 
for line2 in f: 
    spo = re.findall(r'(<.*?>)', line2) 
    s = str(spo[0].strip()) 
    o = str(spo[1].strip()) 
    R.write(str(dictList[s])+'\n') 

顧問ファイル:

advisor(<http://www.Department17.University9.edu/GraduateStudent71>,<http://www.Department17.University9.edu/AssociateProfessor7>) 
advisor(<http://www.Department5.University9.edu/GraduateStudent97>,<http://www.Department5.University9.edu/AssociateProfessor0>) 
advisor(<http://www.Department3.University9.edu/GraduateStudent60>,<http://www.Department3.University9.edu/FullProfessor6>) 
advisor(<http://www.Department17.University9.edu/GraduateStudent70>,<http://www.Department17.University9.edu/AssistantProfessor2>) 
advisor(<http://www.Department9.University9.edu/UndergraduateStudent260>,<http://www.Department9.University9.edu/FullProfessor9>) 
advisor(<http://www.Department3.University9.edu/GraduateStudent59>,<http://www.Department3.University9.edu/AssociateProfessor5>) 

辞書ファイル:

GraduateStudent21158,<http://www.Department17.University9.edu/GraduateStudent66> 
GraduateStudent21159,<http://www.Department17.University9.edu/GraduateStudent67> 
GraduateStudent21160,<http://www.Department17.University9.edu/GraduateStudent68> 
GraduateStudent21161,<http://www.Department17.University9.edu/GraduateStudent69> 
GraduateStudent21162,<http://www.Department17.University9.edu/GraduateStudent7> 
GraduateStudent21163,<http://www.Department17.University9.edu/GraduateStudent70> 
GraduateStudent21164,<http://www.Department17.University9.edu/GraduateStudent71> 
GraduateStudent21165,<http://www.Department17.University9.edu/GraduateStudent72> 
GraduateStudent21166,<http://www.Department17.University9.edu/GraduateStudent73> 
GraduateStudent21167,<http://www.Department17.University9.edu/GraduateStudent74>  
+1

あなたは「s」という値が何であるかを調べることさえしようとしましたか? –

答えて

1

私はあなたが各liの末尾にスペースがあると思いますあなたの辞書ファイルにあります。私はテキストを選択するときにそれらに気付く。これが実際のファイルにある場合、キー検索中に文字列が一致しないため、エラーが発生します。これを試してみてください:

for line1 in e: 
    line1 = line1.strip() 
    ... 

そうでない場合は、あなたの期待キーがdictListキーに実際にあることをテスト:例外が発生し

expected = "<http://www.Department17.University9.edu/GraduateStudent72>" 
assert expected in dictList 

場合はdifflibとの違いを追跡することができます。 +または-と印刷されている場合は、その違いを示します。これは、何が起こっているのかをトラブルシューティングするのに役立ちます。

import difflib 

actual = [k for k in dictList if "72" in k][0] 
for i in difflib.ndiff(expected, actual): 
    print(i, end="") 
+0

あなたは後ろのスペースについて正しいです キー= str(kv [1] .strip()) val = str(kv [0] .strip()) 解決済みの問題 – zaranaid

関連する問題