我正在尝试在python中创建排行榜,玩家将从玩游戏中获得分数,并将其写入.csv文件。然后,我需要阅读此排行榜,从顶部的最大到底部的最小排序。 将值写入文件时,读取文件时或介于两者之间时,应该执行排序吗?
我的代码:
private void jButtonSelectTaskActionPerformed(java.awt.event.ActionEvent evt) {
int num1 = this.jobGrade;//use the int supplied
//by user
String[] colNames = {"Name", "Grade", "Montlhly Salary/Hourly Rate"};
DefaultTableModel model = (DefaultTableModel) staffByTaskGradeTable.getModel();
Object rowData[][] = new Object[staffMembers.size()][3];
for (int i = 0; i < staffMembers.size(); i++) {
if (staffMembers.get(i).grade > num1) {
rowData[i][0] = staffMembers.get(i).name;
rowData[i][1] = staffMembers.get(i).grade;
rowData[i][2] = staffMembers.get(i).getCost();
model.setDataVector(rowData, colNames);
}
}
我希望显示前5个得分和随附的名称。 正是这一点,我碰到了墙。感谢您的帮助。
编辑:获取错误“列表索引超出范围”
cwd = os.getcwd()
print(cwd)
cwd = cwd.replace('\\','/')
print(cwd)
path = cwd + "/training_data/"
print(path)
try:
for files in os.listdir(path):
data = open(path + files,'r').readlines()
bot.train(data)
except Exception as e:
return jsonify("Error while opening file",path,cwd,os.listdir(path))
csv文件:
[
"Error while opening file",
"C:/Users/RakeshS/Desktop/app/training_data/",
"C:/Users/RakeshS/Desktop/app",
[
"code.txt",
"deputation1.txt",
"football.txt",
"Greeting.txt",
"internetaccess.txt",
"intravels.txt",
"sentiment.txt",
"system.txt"
]]
答案 0 :(得分:2)
Python在标准库中有一个csv模块。使用非常简单:
import csv
with open('scores.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow([name, score])
with open('scores.csv') as f:
reader = csv.reader(f)
scores = sorted(reader, key=lambda row: (float(row[1]), row[0]))
top5 = scores[-5:]
将值写入文件时,读取文件时或介于两者之间时,应该执行排序吗?
两种方法都有其优势。如果您在阅读时进行排序,则可以简单地追加到文件中,这可以更快地编写新乐谱。阅读时确实需要花费更多时间,因为您必须先对它进行排序才能算出最高分,但是在本地排行榜文件中这不太可能成为问题,因为您不太可能拥有数千行。阅读时排序可能会很好。
如果在书写时进行排序,则会带来一个问题,即每次添加新乐谱时都必须重写整个文件。但是,如果在编写时进行排序,则清理排行榜文件也更加容易。您只需删除在写作时不再关心的旧/低分数即可。
答案 1 :(得分:1)
尝试一下:
import pandas as pd
df = pd.read_csv('myfullfilepath.csv', sep=',', names=['name', 'score'])
df = df.sort_values(['score'], ascending=False)
first_ten = df.head(10)
first_ten.to_csv('myfullpath.csv', index=False).
我按照您建议的结构命名了类似的列。