如何批量替换CSV中符合条件的指定值(按不同规则批量处理)
批量替换不符合格式的值解决方案
要实现批量替换不同不符合格式的值,我们可以分三步重构代码:先收集所有需要替换的唯一值,再设置替换规则,最后批量应用替换。
步骤1:收集所有不符合格式的唯一值
先遍历所有行,筛选出不符合格式的数值并仅保留唯一值,避免重复询问同一个值的替换规则:
# 假设 strformat 是已定义的格式匹配对象,all_rows 是包含数据的列表 strformat = ... # 你的格式匹配规则,比如正则表达式对象 all_rows = ... # 你的原始数据列表 # 收集所有不符合格式的唯一值 invalid_values = set() for row in all_rows: some_num = row[0] if not strformat.match(some_num): invalid_values.add(some_num)
步骤2:设置批量替换规则
让用户为每个唯一的不符合值输入对应的替换目标,将规则存储为字典:
replace_map = {} for val in invalid_values: change = input(f"\n'{val}' 不符合格式,请输入替换值: ") replace_map[val] = change.strip()
步骤3:批量应用替换规则
再次遍历所有行,利用替换字典批量修改不符合格式的值:
for row in all_rows: some_num = row[0] if not strformat.match(some_num): row[0] = replace_map[some_num]
完整代码示例
import re # 示例:假设格式要求是纯数字 strformat = re.compile(r'^\d+$') # 示例数据 all_rows = [["x", "data1"], ["y", "data2"], ["x", "data3"], ["z", "data4"], ["y", "data5"]] # 收集不符合格式的唯一值 invalid_values = set() for row in all_rows: some_num = row[0] if not strformat.match(some_num): invalid_values.add(some_num) # 设置替换规则 replace_map = {} for val in invalid_values: change = input(f"\n'{val}' 不符合格式,请输入替换值: ") replace_map[val] = change.strip() # 批量替换 for row in all_rows: some_num = row[0] if not strformat.match(some_num): row[0] = replace_map[some_num] # 输出结果验证 print("修改后的数据:") for row in all_rows: print(row)
这样就能实现一次性替换所有出现的同一个不符合值,比如所有x替换为x1、所有y替换为y1,无需逐个处理每一行。
内容的提问来源于stack exchange,提问作者Ae3erdion
相关产品推荐
相关产品推荐

