ValueError:解包python需要多于1个值

时间:2013-05-30 21:06:34

标签: python python-2.7

def main():

    sent_file = open(sys.argv[1])
    tweet_file=open(sys.argv[2])

    scores={}
    for line in sent_file:
       term, score=line.split("/t")
       scores[term]=int(score)

sent_file是这样的:

abandon  -2
abandoned   -2

每个人都用\t隔开,有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您希望跳过没有\t的空行或行,只是在这些情况下捕获ValueError异常:

for line in sent_file:
    try:
        term, score = line.split("\t")
        scores[term] = int(score)
    except ValueError:
        pass

但是,从评论看来,你的数据也是空格分隔的('abilities 2\n'在行中没有\t个字符),所以也许你应该拆分一般的空格:< / p>

for line in sent_file:
    try:
        term, score = line.rsplit(None, 1)  # split on last whitespace separator
        scores[term] = int(score)
    except ValueError:
        pass

现在你要拆分行上的最后一个任意宽度分隔符(不计算开头和结尾的空格),只拆分一次。如果您的任何术语也包含空格,则可确保保留它们。这假定您的分数值中没有任何空格(这也会破坏您自己的代码)。

如果您确定所有拥有的\t分隔数据,或者您可以清理输入文件以仅使用标签,则可以选择使用csv模块,以及使用词典理解:

import csv

with open(sys.argv[1], 'rb') as sent_file:
    reader = csv.reader(sent_file, delimiter='\t')
    scores = {term: int(score) for term, score in reader}