我有一个格式如下的文本文件:
Jeff:2
Bob:7
Adam:4
我已经从文本文件中读取数据并为每一行创建了一个列表。所以当我运行程序时它看起来像这样。
['']
['Jeff', '2']
['Bob', '7']
['Adam', '4']
但是我想为列表中的第一个和第二个元素分配一个变量,这样我就可以从最高到最低对整数进行排序,但它仍然会出现错误,这是我无法解决的。
这是我的代码:
if choice == 1:
f = open("group1.txt", 'r')
for line in f:
line = line.strip("\n").lstrip().rstrip().split(":")
print(line)
name = line[0]
scores = int(line[1])
print(scores)
它给出错误
scores = line[1]
IndexError: list index out of range
我不确定为什么它不起作用数字是列表“line”中的第二个元素
我该如何解决这个问题?感谢您提前提供任何帮助
答案 0 :(得分:2)
看起来文件中有一个空行。实际上你已经指出输出包含:
['']
这是一个包含 1 元素的列表,因此line[1]
ges超出范围。
只需更改代码即可忽略空行或空行:
for line in f:
line = line.strip()
if ':' not in line:
# can't be splitted in two using : as separator
continue
name, scores = line.split(':')
答案 1 :(得分:2)
查看您生成的列表输出:
['']
['Jeff', '2']
['Bob', '7']
['Adam', '4']
看到第一个有什么特别之处?那个是由空行生成的;没有:
字符可以拆分,所以只留下一个元素;没有空格只剩下空字符串。
处理该异常:
line = line.strip().split(":")
print(line)
try:
name = line[0]
scores = int(line[1])
except IndexError:
# not enough elements in the line
continue
print(scores)
try..except
捕获当元素不足时抛出的异常,然后continue
跳到下一行。
也没有必要单独剥离换行符,然后只是左侧,然后只是右侧;一个str.strip()
电话会一步完成所有三项工作。
答案 2 :(得分:0)
文件中的第一行是空行,所以:
line = ''
line = line.strip("\n").lstrip().rstrip().split(":") # still ''
# note that this is just line.strip().split(":")
print(line)
# prints an empty string
name = line[0] # name is an empty string
scores = int(line[1])
# there is no second index in an empty string.
解决这个问题的常用方法是:
for line in f:
if not line:
# edge case of an empty line
continue
# rest of your code