0

こんにちは、Google API を使用して翻訳した単語を保存しようとしているので、同じ翻訳を 2 回行う必要はありません。だからここに私のコードがあります:

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,damp:humedad,mistaken:equivocado,dignity:dignidad

問題は、既に翻訳された単語が、辞書から取得しただけでなく、再度翻訳されてしまうことがよくあることです。その理由はわかりません。それが役立つ場合、translate() は for ループで何千回も連続して呼び出されています。ありがとう。

4

1 に答える 1

0

そのままの except 句はすべての例外を隠してしまうので、コードで実際に何が起こっているのかわかりません。経験則として:裸の except 句を使用しないでください。予期した例外のみをキャッチし、処理できます。または、少なくとも何らかの方法で例外をログに記録し、知らないときに何が起こったかを知っていると仮定して、潜在的に有害なことは決して行いません。あなたの場合、loadtransdict空のファイルを作成するべきではありませんが、何かがうまくいかなかったことを明確に言及する必要があります:

def loadtransdict(fro, to):
    tdict = {}
    filename = "transdict"+fro+"-"+to+".txt"
    try:
        tdictf = open(filename, , "r")
        data = tdictf.read()
        tdictf.close()
    except Exception, e:
        print "failed to open '%s'for reading : %s" % (filename, e)

    else:
        pairs = data.split(",")
        for pair in pairs:
            tdict[pair.split(":")[0]] = pair.split(":")[1]

    return tdict

def writetodict(fro, to, sword, dword):
    filename = "transdict"+fro+"-"+to+".txt"
    try:
        tdictf = open(filename, "rw")
    except Exception, e:
        print "failed to open '%s'for read/write : %s" % (filename, e)
        return False

    data = tdictf.read().strip()
    sep = "," if data else ""
    tdictf.write(data + sep + sword + ":" + dword)
    tdictf.close()
    return True

これだけで根本原因を解決することはできませんが、何が問題なのかについての手がかりを得る必要はありません。

于 2013-04-10T15:08:12.477 に答える