gpt4 book ai didi

powershell - 在 Powershell 中处理 .csv 文件中的重复 header

转载 作者:行者123 更新时间:2023-12-03 03:02:41 25 4
gpt4 key购买 nike

我正在尝试使用 PS 脚本来尝试自动化部分流程,其中可以将一个部门系统的导出导入到另一个部门系统。我需要获取带有多个“;”的行分隔电子邮件地址并将其分成单独的行,每行 1 个地址,同时保留其余数据。我有一个主要有效的解决方案,它依赖于 Import-CSV。

我遇到的问题是我得到的导出有多行具有相同的列标题。这会导致 Powershell 给出错误“成员“结束”已存在”。 (其中“end”是多列的标题)。

当存在重复的列标题时,仅运行“import-csv ./addresses.csv”就会发生这种情况,因此我认为我正在运行 import-csv 命令本身,而不是我可能对脚本执行的任何奇怪操作。

编辑 csv 以更改其中一个列名称可以解决此问题,但这一要求使得该过程很难自动化。

有没有办法使用 powershell 来处理具有重复列名的 CSV?除了包含电子邮件地址的列名之外,我宁愿避免指定列名,因为它们似乎会定期更改。如果我可以保留他们正在使用的列名称,那就最好了。

最佳答案

我知道这是一篇旧帖子,但认为其他人可能正在寻找“更好的解决方案”。

我需要动态更正重复的 header 。并且在我要导入的任何文件之前不知道字段会导致一些重大挑战。

这是我所做的:

# Use System.IO.StreamReader to get the first line. Much faster than Get-Content.
$StreamReader = New-Object System.IO.StreamReader -Arg $csvTemp

# Parse the first line with whatever delimiter you expect. Trim + Remove Empty columns.
# Comment out the last part if you want to generate headers for those who are empty.
[array]$Headers = $StreamReader.ReadLine() -Split "," | % { "$_".Trim() } | ? { $_ }

# Close the StreamReader, as the file will stay locked.
$StreamReader.Close()

# For each Header column
For ($i=0; $i -lt $Headers.Count; $i++) {

if ($i -eq 0) { Continue } #Skip first column.

# If in any previous column, give it a generic header name
if ($Headers[0..($i-1)] -contains $Headers[$i]) {
$Headers[$i] = "Header$i"
}
}

# Import CSV with the new headers
Import-Csv $csvTemp -Header $Headers

关于powershell - 在 Powershell 中处理 .csv 文件中的重复 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18860760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com