Python CSV字符串排序异常:表头外数据行未正确排序
问题分析与代码修正
错误根源
你只完成了表头的不区分大小写排序,但数据行的列顺序完全没跟着新表头调整——数据还是按原始列顺序输出,自然和排序后的表头对应不上。
修正思路
先给原表头的每一列做索引映射,然后对每一行数据,按照排序后的表头顺序,依次提取对应索引位置的值,重新组装成匹配新表头的行。
修正后的代码
import csv from io import StringIO csv_str = """Name,Age,City Alice,30,New York Bob,25,London""" # 读取CSV内容 reader = csv.reader(StringIO(csv_str)) rows = list(reader) if rows: original_header = rows[0] data_rows = rows[1:] # 不区分大小写排序表头 sorted_header = sorted(original_header, key=lambda x: x.lower()) # 建立原表头列名到索引的映射 col_index_map = {col: idx for idx, col in enumerate(original_header)} # 按新表头顺序重新整理数据行 sorted_data = [] for row in data_rows: # 遍历排序后的表头,依次取出对应列的数据 new_row = [row[col_index_map[col]] for col in sorted_header] sorted_data.append(new_row) # 生成输出 output = StringIO() writer = csv.writer(output) writer.writerow(sorted_header) writer.writerows(sorted_data) print(output.getvalue())
验证结果
运行后输出和期望一致:
Age,City,Name 30,New York,Alice 25,London,Bob
关键细节
col_index_map是核心:它把原表头的每个列名和对应的位置索引绑定,比如原表头里Name对应索引0,Age对应1。- 处理数据行时,完全按照排序后的表头顺序去取对应位置的数据,这样表头和数据的对应关系就完全匹配了。
内容的提问来源于stack exchange,提问作者user7104332
相关产品推荐
相关产品推荐

