You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用pandas处理CSV:修复索引排序异常及表头缺失问题

代码存在的问题

  • 排序逻辑错误:你直接把索引列(row[0])作为排序键,CSV读取出来的所有值默认都是字符串类型,字符串排序是逐位比较ASCII码,"10"的首字符"1"比"2"的首字符"2"小,所以会出现10排在2前面的问题。
  • 未写入表头:你读取数据后只取了lines[1:](即跳过表头的所有数据行)做排序,写回文件时也只写入了排序后的数据行,没有把表头加回去。你代码中定义的csv.DictWriter被后续的csv.writer覆盖,完全没有生效。
  • (可选优化):直接用open()打开文件没有用上下文管理器,存在异常时文件未正常关闭的风险。

修改方案

如果你需要按索引数值升序排序(最终顺序为1、2、3...9、10,符合常规数值排序逻辑),修改后代码如下:

import csv

def sort_index():
    # 用with上下文管理器自动处理文件关闭
    with open("transactions1.csv","r", newline='') as read_file:
        r = csv.reader(read_file)
        lines = list(r)
        header = lines[0]
        # 排序时把索引列转成整数做比较,实现数值升序
        sorted_lines = sorted(lines[1:], key=lambda row: int(row[0]))
    
    with open('transactions1.csv','w',newline='') as file_writer:
        writer = csv.writer(file_writer)
        # 先写入表头
        writer.writerow(header)
        # 再写入排序后的数据
        writer.writerows(sorted_lines)
    return False

sort_index()

如果你确实需要按索引字符串排序(1、10、2、3...的顺序和你给出的预期输出一致),只需要把排序的key改回lambda row: row[0]即可,其他逻辑保持不变。

内容的提问来源于stack exchange,提问作者Sophie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:18:01