【发布时间】:2022-01-04 22:07:01
【问题描述】:
我有一个包含两列的简单 csv 文件。我想为 csv 文件添加一个额外的名称和分数,然后按分数对 csv 文件进行排序。
我试图创建一个 2d 列表并添加新项目,将其与原始 csv 文件中的项目组合,使用 lambda 对 2d 列表进行排序,然后用新的排序列表覆盖 csv 文件。 (我不知道这是否是最有效的方法。)
它对相同的值进行排序,例如3 位数字,但如果我输入 4 位数字,似乎无法排序。
import csv
tmp = []
tmp2 = []
tmp.append([])
NameOfPlayer = input("Please enter name of player:\n")
PlayerScore = input("Please eneter score:\n")
tmp[0].append(NameOfPlayer)
tmp[0].append(PlayerScore)
print(tmp)
datafile = open('scores.csv', 'r')
datareader = csv.reader(datafile, delimiter=',')
for line in datareader:
tmp.append(line)
sort = sorted(tmp, key=lambda x: x[1], reverse=True)
for line in sort:
tmp2.append(line)
datafile1 = open('scores.csv', 'w')
x = 0
for row in tmp2:
newRec = tmp2[x][0] + "," + tmp2[x][1] + "\n"
x = x + 1
datafile1.write(newRec)
datafile1.close()
【问题讨论】:
-
我看不出这段代码如何区分 3 位数字和 4 位数字。不过,它会按字典顺序排序,而不是按数字排序,因为您永远不会将从 CSV 文件中读取的数据转换为数字。
-
replit有可能出错吗?
-
很可能不会。
-
您可能需要将输入从字符串更改为整数。例如,在第一个 for 循环中,您可以尝试
tmp.append(list(map(float,line))) -
@BenGrossmann 这将转换为
float,而不是整数。