You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python CSV模块写入指定列且不覆盖原有数据的问题

问题分析

原代码的核心问题是:只要uid符合条件就直接覆盖mail字段,完全忽略了原CSV中mail列已有的数据。正确逻辑应该是:仅当原有mail为空/不存在,且uid非空且不含@时,才生成新的mail值;如果原有mail已有内容,直接保留原值。

修正后的代码
import csv

def process_csv(input_filename, output_filename):
    with open(input_filename, 'r') as infile, open(output_filename, 'w', newline='') as outfile:
        reader = csv.DictReader(infile)
        # 确保fieldnames包含mail列,原文件已有则不重复添加
        fieldnames = reader.fieldnames.copy()
        if 'mail' not in fieldnames:
            fieldnames.append('mail')
        
        writer = csv.DictWriter(outfile, fieldnames=fieldnames)
        writer.writeheader()

        for row in reader:
            new_row = dict(row)
            # 先获取原有mail值,默认空字符串
            original_mail = new_row.get('mail', '')
            uid_value = new_row.get('uid', '')
            
            # 仅在原有mail为空,且uid符合条件时生成新mail
            if not original_mail and uid_value and '@' not in uid_value:
                new_row['mail'] = uid_value + '@this.domain.com'
            else:
                # 保留原有mail内容(即使为空)
                new_row['mail'] = original_mail

            writer.writerow(new_row)

process_csv('input.csv', 'output.csv')
修改说明
  • 处理列名时,先检查原文件是否已有mail列,避免重复添加导致列名冗余
  • 优先读取原有mail值,仅在满足「原有mail为空+uid符合规则」的双重条件时,才生成新的mail值
  • 所有场景下都保留原有mail的内容,彻底杜绝覆盖原有数据的问题

内容的提问来源于stack exchange,提问作者tjw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:29:58