我正在阅读文本文件并将其转换为python词典:
使用labelword文件看起来像这样:
20001 World Economies
20002 Politics
20004 Internet Law
20005 Philipines Elections
20006 Israel Politics
20007 Science
这是读取文件和创建字典的代码:
def get_pair(line):
key, sep, value = line.strip().partition("\t")
return int(key), value
with open("mapped.txt") as fd:
d = dict(get_pair(line) for line in fd)
print(d)
我打印d的内容时收到{}
。
此外,我收到此错误:
Traceback (most recent call last):
File "predicter.py", line 23, in <module>
d = dict(get_pair(line) for line in fd)
File "predicter.py", line 23, in <genexpr>
d = dict(get_pair(line) for line in fd)
File "predicter.py", line 19, in get_pair
return int(key), value
ValueError: invalid literal for int() with base 10: ''
这是什么意思?我确实在文件中有内容,我不知道为什么它没有被阅读。
答案 0 :(得分:3)
这意味着key
为空,这反过来意味着您在开头或空行处有一行\t
标签:
>>> '\tScience'.partition('\t')
>>> ''.partition('\t')
('', '', '')
我的猜测是后者;你可以跳过生成器表达式中的这些行:
d = dict(get_pair(line) for line in fd if '\t' in line.strip())
因为line.strip()
返回没有前导和尾随空格的行,所以在开头只有一个制表符的空行或行会导致字符串中没有制表符。这不会处理所有案例,但您也可以删除传递给get_pair()
的值:
d = dict(get_pair(line.strip()) for line in fd if '\t' in line.strip())