Python实现CSV文件指定列从1到n重新索引的方法
解决CSV文件第一列重新编号的问题
你的需求是将CSV第一列从1开始按顺序重新编号,同时保留后两列数据,原代码的核心问题是错误地将整行字符串的单个字符当作列数据处理,且未跳过表头行,以下是两种可行的解决方法:
方法一:使用Python标准csv模块(推荐)
csv模块能自动处理CSV的格式细节(比如含逗号的字段、换行符等),代码更健壮:
import csv with open('data-left.csv', 'r', encoding='utf-8') as infile, open('data-left2.csv', 'w', encoding='utf-8', newline='') as outfile: # 初始化读写器 csv_reader = csv.reader(infile) csv_writer = csv.writer(outfile) # 写入表头 header = next(csv_reader) csv_writer.writerow(header) # 遍历数据行,重新编号第一列 row_count = 1 for row in csv_reader: # 替换第一列为当前编号,保留后两列 new_row = [str(row_count)] + row[1:] csv_writer.writerow(new_row) row_count += 1
方法二:手动分割行(适用于简单CSV场景)
如果你的CSV没有复杂格式(比如字段不含逗号),可以直接分割字符串处理:
with open('data-left.csv', 'r', encoding='utf-8') as f_in, open('data-left2.csv', 'w', encoding='utf-8') as f_out: # 读取并写入表头 header = f_in.readline() f_out.write(header) current_num = 1 for line in f_in: # 去除换行符并分割列 columns = line.strip().split(',') # 确保行有足够列数,避免索引错误 if len(columns) >= 3: new_line = f"{current_num},{columns[1]},{columns[2]}\n" f_out.write(new_line) current_num += 1
原代码的问题分析
- 错误处理列数据:
fileone = f1.readlines()读取的是整行字符串,item[1]取的是字符串的第二个字符(比如第一行数据1200,ZMQ1314,...的item[1]是2),不是第二列内容。 - 未跳过表头:循环直接遍历所有行,会把表头也当作数据行处理。
- 无效判断条件:
if item[1] != "None"完全不符合逻辑,item[1]是单个字符,永远不会等于字符串"None"。
内容的提问来源于stack exchange,提问作者James Black
相关产品推荐
相关产品推荐

