2

我有一本西班牙小说,在一个纯文本文件中,我想制作一个 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

小说很大,我做的字典大约有一万个键值对。

这是否意味着字典有问题?还是太大了?一直在研究这个很多,但我似乎无法理解它。任何意见,将不胜感激。

4

4 回答 4

2

line.split()inogword, meaning = line.split()返回一个list,在这种情况下它可能返回超过 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 回答
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 回答
1
split() 

返回一个列表,即一项,您正试图将这一项分配给两个变量。

如果列表中的项目数等于赋值语句左侧的变量数,它将起作用。即,解包列表并将各个部分分配给左侧的变量。

在这种情况下,正如@Josvic Zammit 所指出的,如果列表中有超过 2 个项目并且无法正确“解包”和分配,则可能会出现问题。

于 2012-04-15T13:09:51.643 回答