2

私はスペイン語の小説を平文のテキスト ファイルで持っています。難しい単語の後に括弧で囲んで翻訳する Python スクリプトを作成したいと考えています。これを行いたい単語のリスト (翻訳付き) を別のテキスト ファイルに用意しました。これを正しく書式設定しようとしました。Python について知っていることはすべて忘れてしまいました。Python は、最初はほとんどなかったので、苦労しています。これは誰かが私を助けてくれたスクリプトです:

bookin = (open("C:\Users\King Kong\Documents\_div_tekstfiler_\coc_es.txt")).read() 
subin = open("C:\Users\King Kong\Documents\_div_tekstfiler_\cocdict.txt")
for line in subin.readlines():
    ogword, meaning = line.split()
    subword = ogword + " ("  + meaning + ")"
    bookin.replace(ogword, subword)
    ogword = ogword.capitalize()
    subword = ogword + " ("  + meaning + ")"
    bookin.replace(ogword, subword)
subin.close()
bookout = open("fileout.txt", "w")
bookout.write(bookin)
bookout.close()

これを実行すると、次のエラー メッセージが表示されました。

Traceback (most recent call last):
File "C:\Python27\translscript_secver.py", line 4, in <module>
ogword, meaning = line.split()
ValueError: too many values to unpack

小説はかなり大きく、私が作成した辞書は約 1 万のキーと値のペアで構成されています。

これは、辞書に問題があるということですか? それとも大きすぎますか?いろいろ調べているのですが、いまいちよくわかりません。アドバイスをいただければ幸いです。

4

4 に答える 4

2

line.split()行内の単語 (スペースで区切られたトークン) のリストを返します。表示されるエラーは、どこかで辞書に単なるペア以外のものが含まれていることを示唆しています。エラーを特定するためにトレース メッセージを追加することができます (以下を参照)。

辞書に同義語よりも豊富な定義が含まれている場合は、次の行を使用して、最初の単語を ogword に入れ、次の単語を意味に入れることができます。

words =  line.split()
ogword, meaning = words[0], " ".join(words[1:])

辞書の構文がより複雑な (ogword で構成されている) 場合は、明示的な区切り記号に依存する必要があります。split を使用して行を分割することもできます ( line.split("=")「=」文字で行を分割します)

編集:悪い行を無視して表示するには、次のように置き換えogword, meaning = line.split()ます

try:
    ogword,meaning = line.split()
except:
    print "wrong formated line:", line
    continue
于 2012-04-15T13:27:18.107 に答える
2

line.split()inはlistogword, meaning = line.split()を返します。この場合、2 つ以上の値が返される可能性があります。3 つ以上の値を処理できる方法でコードを記述します。たとえば、リストに割り当ててから、リストに 2 つの項目があることをアサートします。line.split()

mylist = line.split()
assert len(mylist) == 2
于 2012-04-15T13:08:09.310 に答える
2
ogword, meaning = line.split()[:2]
于 2012-04-15T13:08:48.707 に答える
1
split() 

単一のリスト、つまり 1 つの項目を返します。この 1 つのことを 2 つの変数に割り当てようとしています。

リスト内のアイテムの数が代入ステートメントの左側の変数の数と等しい場合に機能します。つまり、リストがアンパックされ、個々の部分が左側の変数に割り当てられます。

この場合、@Josvic Zammit が指摘したように、リストに 2 つ以上の項目があり、適切に「解凍」して割り当てることができない場合に問題が発生する可能性があります。

于 2012-04-15T13:09:51.643 に答える