如何将CSV1的组名列按用户名匹配添加到CSV2对应行?
按用户名匹配合并两个CSV文件的组名列
问题场景
现有两个CSV文件:
- CSV1:存储用户名与对应的组名
- CSV2:存储用户名、MFA信息及其他无关列
需要将CSV1中的组名作为新列添加到CSV2中,但两个文件行顺序不一致,无法通过排序完成匹配。
CSV1示例
Group Name Username Member Bob.Joe Support Mike.House Support Annie.Naym Member Fayke.Nayme Security Anutha.Name
CSV2示例
Name Login MFA Joe Schmo joe.schmo Type1 Bob Joe bob.joe Type2 Mike House mike.house Type2 Randum Guy randum.guy Type1 Annie Naym annie,naym Type2 Fayke Nayme fayke.name Type2 Anutha.Name anutha.name Type2
期望输出
Name Login MFA Group Name Joe Schmo joe.schmo Type1 Bob Joe bob.joe Type2 Member Mike House mike.house Type2 Support Randum Guy randum.guy Type1 Annie Naym annie,naym Type2 Support Fayke Nayme fayke.name Type2 Member Anutha.Name anutha.name Type2 Security
解决方案
方法1:Python脚本实现(推荐)
利用pandas库按用户名匹配合并,自动处理大小写和格式差异:
import pandas as pd # 读取两个CSV文件(根据实际分隔符调整sep参数,示例为空格分隔) df_group = pd.read_csv('csv1.csv', sep='\s+', engine='python') df_user = pd.read_csv('csv2.csv', sep='\s+', engine='python') # 统一用户名格式:转小写、替换逗号为点,避免格式不匹配 df_group['Username'] = df_group['Username'].str.lower().str.replace(',', '.') df_user['Login'] = df_user['Login'].str.lower().str.replace(',', '.') # 按用户名左合并,保留CSV2所有行,匹配不到的组名留空 merged_df = pd.merge(df_user, df_group, left_on='Login', right_on='Username', how='left') # 整理列顺序并移除冗余列 merged_df = merged_df[['Name', 'Login', 'MFA', 'Group Name']] # 导出结果到新CSV merged_df.to_csv('merged_result.csv', sep='\t', index=False)
方法2:PowerShell脚本实现(Windows环境)
无需额外安装工具,直接用系统自带PowerShell处理:
# 读取两个CSV文件(根据实际分隔符调整-Delimiter) $groupData = Import-Csv -Path "csv1.csv" -Delimiter "`t" $userData = Import-Csv -Path "csv2.csv" -Delimiter "`t" # 构建用户名到组名的映射表 $groupMap = @{} foreach ($row in $groupData) { $normalizedUser = $row.Username.ToLower().Replace(',', '.') $groupMap[$normalizedUser] = $row.'Group Name' } # 遍历用户数据,添加组名列 $result = foreach ($row in $userData) { $normalizedLogin = $row.Login.ToLower().Replace(',', '.') [PSCustomObject]@{ 'Name' = $row.Name 'Login' = $row.Login 'MFA' = $row.MFA 'Group Name' = if ($groupMap.ContainsKey($normalizedLogin)) { $groupMap[$normalizedLogin] } else { '' } } } # 导出合并结果 $result | Export-Csv -Path "merged_result.csv" -Delimiter "`t" -NoTypeInformation
方法3:Excel公式实现(无代码方案)
适合不熟悉编程的用户,用VLOOKUP+IFERROR完成匹配:
- 同时打开CSV1和CSV2文件
- 在CSV2的空白列(如D列)添加表头
Group Name - 在D2单元格输入以下公式,下拉填充所有行:
公式说明:统一用户名格式后,在CSV1的用户名列中匹配,返回对应组名,匹配不到则显示空值=IFERROR(VLOOKUP(LOWER(SUBSTITUTE(B2,",",".")), LOWER(SUBSTITUTE(CSV1!$B:$B,",",".")), 2, FALSE), "") - 保存CSV2为新文件即可
内容的提问来源于stack exchange,提问作者GooseAtCompany
相关产品推荐
相关产品推荐

