我有一本西班牙小说,在纯文本文件中,我想制作一个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
这本小说非常大,我制作的字典包含大约一万个关键值对。
这是否意味着字典有问题?或者它太大了? 一直在研究这个,但我似乎无法理解它。任何建议将不胜感激。
答案 0 :(得分:2)
line.split()
中的 ogword, meaning = line.split()
会返回list,在这种情况下,它可能会返回超过2个值。以能够处理两个以上值的方式编写代码。例如,通过将line.split()
分配给列表,然后断言该列表有两个项目:
mylist = line.split()
assert len(mylist) == 2
答案 1 :(得分:2)
ogword, meaning = line.split()[:2]
答案 2 :(得分:2)
line.split()
返回一个单词列表(空格分隔的标记)。您得到的错误表明,在某个地方,您的词典不仅仅包含对。您可以添加跟踪消息以查找错误(请参阅下文)。
如果您的词典包含比同义词更丰富的定义,您可以使用以下行,将第一个单词放在ogword中,将后面的单词放在含义中。
words = line.split()
ogword, meaning = words[0], " ".join(words[1:])
如果您的字典语法更复杂(由ogword组成),则必须依赖显式分隔符。您仍然可以使用拆分来划分您的行(line.split("=")
将在“=”字符上拆分一行
修改:要忽略并显示不良行,请将ogword, meaning = line.split()
替换为
try:
ogword,meaning = line.split()
except:
print "wrong formated line:", line
continue
答案 3 :(得分:1)
split()
返回单个列表,即一个项目,您试图将这一项分配给两个变量。
如果列表中的项目数等于赋值语句左侧的变量数,它将起作用。即,列表被解压缩,各个部分被分配给左侧的变量。
在这种情况下,正如@Josvic Zammit所指出的,如果列表中有超过2个项目并且无法正确“解压缩”并分配,则可能会出现此问题。