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

使用Ruby合并两个数据不同的CSV并替换对应邮箱

解决思路与Ruby实现方案

嘿,这个需求本质就是建立姓名到邮箱的映射,再批量替换目标CSV的邮箱字段,刚好你熟悉Ruby的CSV操作,那咱们直接上干货:

核心步骤

  • 先从google.csv中提取「姓名-邮箱」的对应关系,这里要重点处理大小写不匹配的问题(毕竟你的示例里asm是全大写,google是正常大小写)
  • 遍历asm.csv的每一行,用姓名去映射表中查找对应的google邮箱,找到就替换,找不到则保留原邮箱
  • 将处理后的结果写入新的CSV文件

完整代码实现

require 'csv'

# 1. 构建Google CSV的姓名-邮箱映射表(统一转小写避免大小写匹配问题)
google_email_map = {}
CSV.foreach('google.csv', headers: true) do |row|
  # 拼接全名并转小写,作为映射的key
  full_name_key = "#{row['First_name'].downcase} #{row['Last_name'].downcase}"
  # 存储对应的Google邮箱
  google_email_map[full_name_key] = row['Email_address']
end

# 2. 处理ASM CSV并生成更新后的文件
CSV.open('updated_asm.csv', 'w', write_headers: true, headers: ['first_name', 'last_name', 'email_address']) do |output_csv|
  CSV.foreach('asm.csv', headers: true) do |input_row|
    # 同样转小写生成匹配key
    full_name_key = "#{input_row['first_name'].downcase} #{input_row['last_name'].downcase}"
    # 优先使用Google的邮箱,找不到则保留原邮箱
    updated_email = google_email_map[full_name_key] || input_row['email_address']
    # 写入新行(保留原姓名的大小写格式)
    output_csv << [input_row['first_name'], input_row['last_name'], updated_email]
  end
end

注意事项

  • 路径问题:确保google.csv和asm.csv与你的Ruby脚本在同一目录,或者使用绝对路径(比如'/Users/xxx/Documents/google.csv')
  • 重名处理:如果google.csv中有多个相同姓名的用户,后面的条目会覆盖前面的邮箱。如果需要处理重名场景,可以考虑把映射值改成数组,再根据额外逻辑选择邮箱
  • 测试建议:先拿一小部分样本数据测试脚本,确认替换逻辑正确后再处理全量数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:52:07