Привет, я пытаюсь сохранить мои слова, которые я переводил с помощью google api, поэтому мне не нужно делать один и тот же перевод дважды. Так вот мой код:Почему мой словарь python не обновляется правильно?
def loadtransdict(fro, to):
try:
tdictf = open("transdict"+fro+"-"+to+".txt", "r")
pairs = tdictf.read().split(",")
tdictf.close()
tdict = {}
for pair in pairs:
tdict[pair.split(":")[0]] = pair.split(":")[1]
return tdict
except:
tdictf = open("transdict"+fro+"-"+to+".txt", "w")
tdictf.close()
return {}
else:
return None
def writetodict(fro, to, sword, dword):
try:
tdictf = open("transdict"+fro+"-"+to+".txt", "r")
if tdictf.read() == "":
tdictf = open("transdict"+fro+"-"+to+".txt", "a")
tdictf.write(sword+":"+dword)
else:
tdictf = open("transdict"+fro+"-"+to+".txt", "a")
tdictf.write(","+sword+":"+dword)
tdictf.close()
except:
return None
def translate(original_word, fro, to):
tdict = loadtransdict(fro, to)
if original_word in tdict:
return tdict[original_word]
else:
print original_word
print tdict
#mm = requests.get('http://api.mymemory.translated.net/get?q='+word+'&langpair='+fro+'|'+to)
gt = requests.get('https://www.googleapis.com/language/translate/v2?key=MYKEY='\
+original_word+'&source='+fro+'&target='+to+'&prettyprint=false')
translated_word = re.search("translatedText\":\"(.*)\"", gt.text).group(1)
writetodict(fro,to,original_word,translated_word)
return translated_word
где transdicten-es.txt представляет собой файл, содержащий переводы, написанные на ней в следующем формате:
постоянно: constantemente, заповедал: ordenado, влажный: Humedad, ошибаетесь: equivocado, достоинство: Дигнидад
Моя беда в том, что часто слова, которые уже были переведены в конечном итоге переводится снова, а не только извлечь из словаря, и я не могу понять, почему! Если это помогает, translate() вызывается много 1000 раз подряд в цикле for. Благодарю.
Вы считали, что вместо этого используете 'bsddb'? Это может значительно упростить вашу программу. –
Проверьте отступ в методе 'loadtransdict' - Python является незаметным. – thegrinner
larsmans: Я рассмотрю bsddb, этот способ сделать это кажется немного неуклюжим, но я просто прототипировал и был смущен, почему это не сработало. Спасибо хоть. thegrinner: Это артефакт копирования-вставки из затмения, код работает нормально. Будет редактировать, чтобы избежать путаницы. – Rested