您想跳过空行或没有 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}