python - python - 读取和写入文件时如何对Python IndexError:List Index out of range进行排序
问题描述
我正在用 Python 开发一个游戏,最后,分数被写入一个文件,然后从文件中提取前 5 个分数。这通常工作得很好,但是一旦我重置了高分,我就会收到一个索引错误,说“列表索引超出范围” Traceback(最近一次调用最后一次):
File "/home/leo/Documents/Python/infinitest/infinitest.py", line 172, in <module>
scoreboard()
File "/home/leo/Documents/Python/infinitest/infinitest.py", line 147, in scoreboard
print("{0[0]} : {1[0]}\n{0[1]} : {1[1]}\n{0[2]} : {1[2]}\n{0[3]} : {1[3]}\n{0[4]} : {1[4]}".format(scores,names))
IndexError: list index out of range
我将如何解决这个问题
def scoreboard():
c = add_up1(False)
d = add_up2(False)
with open("/home/leo/Documents/Python/infinitest/hi2.txt", "a+") as leaders:
leaders.write('{},{}\n'.format(c,name1))
leaders.write('{},{}\n'.format(d,name2))
line=leaders.readline()
dic={}
for line in leaders:
data = line.split(",")
dic[int(data[0])] = data[1]
dic1={}
for key in sorted(dic.keys()):
dic1[key]=dic[key]
scores=list(dic1.keys())
names=list(dic1.values())
names =names[::-1]
scores= scores[::-1]
print("{0[0]} : {1[0]}\n{0[1]} : {1[1]}\n{0[2]} :{1[2]}\n{0[3]} : {1[3]}\n{0[4]} : {1[4]}".format(scores,names))
在外部文件中,它的格式是分数,后跟一个逗号,然后是一个用户名。例如:
100,exampleuser
add_up 函数很好,只返回总分。我尝试添加占位符分数来解决问题,例如
1,Placeholder1
2,Placeholder2
3,Placeholder3
4,Placeholder4
5,Placeholder5
这有时有效,但现在不再有效。
解决方案
写入文件后,它的位置在最后——你可以用leaders.tell()
. 当您开始阅读时,for 循环会立即退出,因为没有更多行并dic
保持为空。稍后,scores
并且names
是空的,因此IndexError
当您尝试访问项目时会得到一个。
在开始读取文件集之前,它的位置回到开头 - 如果有一个你不想跳过第一行的标题:
...
leaders.seek(0)
#_ = next(leaders) # skip header
for line in leaders:
data = line.split(",")
dic[int(data[0])] = data[1]
推荐阅读
- java - TensorFlow 2.0 和 Java API
- d3.js - 数据过滤器适用于 json 数据,但不适用于 csv 数据
- javascript - 从 Angular 中的 Click 事件处理程序获取源元素
- php - 在 Docker 中安装 GD 扩展
- php - 如何在 DateInterval 扩展类中创建 days 属性?
- python - 向数据框中添加新列,显示包含数字的所有行的总和
- python - 如何创建每另一列的前一行为1时增加1的ID
- php - 使用 ip 和掩码获取网络地址。(php, IPv6)
- java - javax.persistence.PersistenceException: org.hibernate.TransactionException: 已经有一个关联的托管连接
- c# - 如何减少代码中的 SQL 查询量?