0
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,有人可以帮我解决这个问题吗?

4

1 回答 1

1

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

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

但是,从评论看来,您也有以空格分隔的数据(行'abilities 2\n'中没有\t字符),因此也许您应该拆分为一般空白:

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模块,并使用 dict 理解:

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}
于 2013-05-30T21:10:49.513 回答