排序CSV文件以在Python程序中读取

时间:2018-11-22 14:05:10

标签: python csv

我正在尝试在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"
]]

2 个答案:

答案 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). 

我按照您建议的结构命名了类似的列。