Python过滤CSV数据问题:索引排序与多余空格修复求助
解决方案代码
import csv # 读取输入CSV并处理多余空格 with open('input.csv', 'r', newline='') as infile: # skipinitialspace=True 会忽略逗号后的多余空格,得到干净的字段值 reader = csv.DictReader(infile, skipinitialspace=True) rows = list(reader) # 筛选名字以元音结尾的行(不区分大小写) vowel_end = {'a', 'e', 'i', 'o', 'u'} filtered_rows = [ row for row in rows if row['name'].strip().lower()[-1] in vowel_end ] # 生成符合要求的输出内容,修复索引和格式 output_lines = ["index, name, id, status"] # 匹配原格式的表头 for new_idx, row in enumerate(filtered_rows, start=1): # 按原格式拼接每行内容,确保空格数量一致 line = f"{new_idx}, {row['name']}, {row['id']}, {row['status']}" output_lines.append(line) # 写入输出CSV with open('output.csv', 'w', newline='') as outfile: outfile.write('\n'.join(output_lines))
问题修复说明
1. 索引序号顺序不正确的问题
原代码大概率直接保留了输入CSV中的原始index值,导致筛选后索引不连续。解决方案是用enumerate(filtered_rows, start=1)生成新的连续索引,从1开始递增,替换原有的index字段值。
2. 每行多余空格的问题
- 读取阶段:使用
csv.DictReader的skipinitialspace=True参数,自动忽略逗号后面的多余空格,避免读取到带空格的字段值(比如原CSV中name字段的" Anne"会被处理成"Anne")。 - 写入阶段:放弃使用
csv.writer(它会默认用单一逗号分隔,无法保留原格式的多空格),而是手动按原格式拼接每行字符串,确保空格数量和预期输出完全一致。
内容的提问来源于stack exchange,提问作者ziyodullo jumayev
相关产品推荐
相关产品推荐

