Python不使用pandas读取CSV文件排序结果错误如何解决?
问题排查与代码修正
- 核心错误:
csv.reader读取出来的所有值默认都是字符串类型,直接按第二列排序时走的是字符串字典序规则,不是数值大小规则:'11'的首位字符'1'的ASCII码小于'9',所以会出现11开头的数值反而排在9后面的问题 - 冗余逻辑问题:代码中
for row in reader属于无效循环,且会迭代消耗掉reader的首行数据,导致排序时漏掉第一条记录 - 多余文件操作:
with语句会在代码块执行结束后自动关闭文件,末尾的csvFile.close()无需额外添加
修正后代码
import csv with open('final.csv', 'r') as csvFile: reader = csv.reader(csvFile) # 读取所有行,按第二列的浮点数值倒序排序 sortedlist = sorted(reader, key=lambda x: float(x[1]), reverse=True) for eachline in sortedlist: print(eachline)
修正后运行输出
['sarvin', '11.375'] ['sina', '11.285714285714286'] ['sara', '9.75'] ['soheila', '7.833333333333333'] ['hamid', '6.066666666666666'] ['ali', '5.0']
内容的提问来源于stack exchange,提问作者Rana Abadi
相关产品推荐
相关产品推荐

