如何用Python清理CSV单元格前后空格与冗余逗号并修复代码报错
CSV清洗代码报错修复方案
报错根因
当前代码触发TypeError的核心问题是map回调的构造逻辑完全不符合Python语法规范:
str.replace是字符串类的描述符方法,必须绑定到具体的字符串实例才能调用。你直接在str类上调用replace、再链式拼接strip的写法,既没有传入replace必须的「待处理目标字符串」入参,也把拼接好的方法链错当成可接收单值的回调函数,直接触发描述符入参缺失的类型错误- 你使用的
__old、__new关键字参数,本身也不符合str.replace的API定义,该方法要求按位置传入「被替换字符、替换目标字符」两个参数。
修正后可正常运行的代码
匹配「移除单元格首尾空格、清除字段内部冗余逗号、避免逗号拆分字段」的需求,完整可运行的实现如下:
import csv def clean_cell(content): # 对单元格内容执行两步清洗:去除首尾所有空白,移除内部冗余逗号 return content.strip().replace(',', '') with open("old_dirty_file.csv", "r", encoding="utf-8") as source_file: csv_reader = csv.reader(source_file, delimiter=",") with open("new_clean_file.csv", "w", newline="", encoding="utf-8") as target_file: csv_writer = csv.writer(target_file) for row in csv_reader: # 逐单元格应用清洗逻辑后写入新文件 cleaned_row = map(clean_cell, row) csv_writer.writerow(cleaned_row)
实现效果
- 所有带前置空格的字符串类型内容,会通过
strip()移除首尾空白,被Excel正确识别为数值类型,实现数值默认的右对齐效果 - 字段内部类似千分位分隔的冗余逗号,会被统一替换为空字符串,不会出现因逗号拆分字段、把完整数值拆到多列的问题
- 代码显式指定文件编码,避免跨环境的中文乱码问题;写入时保留
newline=""参数,符合csv模块的写入规范,不会出现行间空行的问题
内容的提问来源于stack exchange,提问作者Naveen Reddy Marthala
相关产品推荐
相关产品推荐

