PowerShell实现CSV首行插入数据并保留原日期下移原有行
PowerShell 处理CSV插入行并调整后续数据
问题分析
需要在CSV的第一个数据行(索引0)插入新行:保留原行的Date、Game、Team字段值,将Win/Loss设为0;同时原数据行整体下移,且下移后的行日期自动加1天、Game编号加1,避免出现日期重复、编号断层的问题。
解决代码
# 读取目标CSV文件 $originalData = Import-Csv -Path ".\source.csv" # 初始化新数据集合 $newData = @() # 生成要插入的新行:复制原第一行数据,仅修改Win和Loss为0 $insertRow = $originalData[0] | Select-Object * $insertRow.Win = 0 $insertRow.Loss = 0 $newData += $insertRow # 遍历原所有数据行,调整日期和Game编号后加入新集合 foreach ($row in $originalData) { # 复制当前行对象,避免修改原数据 $updatedRow = $row | Select-Object * # 转换日期格式并加1天,保持原显示格式 $updatedDate = ([DateTime]$row.Date).AddDays(1) $updatedRow.Date = $updatedDate.ToString("M/d/yy") # Game编号加1 $updatedRow.Game = [int]$row.Game + 1 # 加入新数据集合 $newData += $updatedRow } # 将处理后的数据写入新CSV文件(可指定新路径避免覆盖原文件) $newData | Export-Csv -Path ".\updated.csv" -NoTypeInformation -Encoding UTF8
代码说明
Import-Csv:将CSV文件转为对象数组,直接通过字段名操作数据,无需手动拆分字符串- 插入行处理:复制原第一行的Date/Game/Team值,仅重置Win/Loss为0
- 原数据行调整:
- 用
Select-Object *复制行对象,防止修改原CSV的原始数据 - 把Date转为DateTime类型后加1天,再转回原格式(M/d/yy)
- Game字段转为整数后加1,保证编号连续
- 用
Export-Csv:写入新文件时,-NoTypeInformation避免生成PowerShell专属的类型信息行,-Encoding UTF8确保文件编码兼容大多数场景
效果验证
原CSV内容:
Date,Game,Team,Win,Loss
4/13/23,1,PHI,1,0
4/14/23,2,PHI,0,1
执行后生成的CSV:
Date,Game,Team,Win,Loss
4/13/23,1,PHI,0,0
4/14/23,2,PHI,1,0
4/15/23,3,PHI,0,1
内容的提问来源于stack exchange,提问作者Axee4
相关产品推荐
相关产品推荐

