如何解决CSV按User_ID升序排序时的表头及排序逻辑问题?
解决CSV排序的两个问题
这里给你修正后的代码,直接解决表头位置错误、ID按字符串排序的问题:
import csv # 用with语句处理文件,自动关闭更省心 with open("file.csv", 'r') as file: csv_reader = csv.reader(file, delimiter=';') # 先把表头读出来 header = next(csv_reader) # 按User_ID的数值大小排序,把字符串转成整数再比较 sorted_rows = sorted(csv_reader, key=lambda row: int(row[0])) # 先输出表头,再输出排序后的内容 print(';'.join(header)) for row in sorted_rows: print(';'.join(row))
改动说明
- 表头位置问题:原代码只读取了表头却没有输出,现在先打印表头,再遍历输出排序后的行,自然就把表头固定在文件顶部了。
- 排序逻辑错误:之前直接拿User_ID的字符串比较,计算机只会按字符顺序判断(比如"13000"的首字符"1"比"2000"的"2"小,所以排前面)。改成
int(row[0])后,就会按数值大小排序,13000就会正确排在9999之后。
如果需要把结果保存为新文件而非打印,替换掉print部分即可:
# 写入到新的排序后文件 with open("sorted_file.csv", 'w', newline='') as out_file: csv_writer = csv.writer(out_file, delimiter=';') csv_writer.writerow(header) csv_writer.writerows(sorted_rows)
内容的提问来源于stack exchange,提问作者rookie_steve
相关产品推荐
相关产品推荐

