Python如何对带表头的CSV文件按数值列排序且保留表头位置
解决方案
直接在排序的key函数中添加表头判断逻辑即可,不需要拆分表头和数据行,全程可以用极简代码完成:
import csv # 读取文件并完成排序 with open('CleanReport.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) # 表头行的Age列为非数字,返回无穷大保证降序时永远排在第一位,其余行转整数排序 sorted_rows = sorted(reader, key=lambda x: int(x[2]) if x[2].isdigit() else float('inf'), reverse=True) # 一次性写入排序后所有内容,无需单独处理表头 with open('SortedCleanReport.csv', 'w', encoding='utf-8', newline='') as f: csv.writer(f).writerows(sorted_rows) # 验证输出 for row in sorted_rows: print(row)
逻辑说明
- 原来lambda转int报错是因为表头行的第2索引取值为字符串
Age,无法转成整数,这里通过isdigit()判断区分表头和数据行 - 表头行返回
float('inf')(无穷大),配合reverse=True降序规则,无穷大是最大值,会固定排在所有行的最前面 - 数据行直接把Age列转成整数作为排序依据,实现数值维度的降序排序
- 写入时直接调用
writerows方法批量写入所有排序后的行,不需要单独写入表头,也不需要逐行循环写入,完全避开你提到的四个繁琐步骤。
如果你的Age列存在负数场景,把判断条件改成x[2].lstrip('-').isdigit()即可兼容。
内容的提问来源于stack exchange,提问作者Rudra
相关产品推荐
相关产品推荐

