powershell - Powershell - 查询 CSV 列名并将它们写入新的 CSV
问题描述
所以我试图查看 CSV 中的列名,将它们写入一个数组,然后将数据吐回一个新的 CSV 并附加一个新列。只要我可以在标题中添加一列,我并不真正关心当前数据表的外观。这似乎是一件相当基本的事情,但我似乎找不到任何人这样做的情况。例如:
"Name","Location","Phone"
"John Smith","Toronto","555.555.5555"
"Jane Doe","Dallas","555.555.5554"
我只想保留名称、位置和电话列名称,并将它们放入另一个带有一个额外列的 CSV。问题是,实际上,有更多的列并且它们并不总是相同的,因此脚本需要能够与列名无关。我应该能够为它提供具有任意数量的具有不同名称的列的任何 CSV,并且能够获得仅包含列名称的输出文件。我已经尝试了至少十几种不同的方法来做到这一点,并不断遇到不同的问题。
例子:
$validatedfilepath = "validfile.csv"
$csvData = New-Object PSObject
$csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
$csvdata = $csvdata | get-member -Name * -MemberType NoteProperty
$csvData = @($csvData.Name)
$csvData
这将在我的新有效文件中显示我想要的列名的确切列表,但我不知道如何将其作为列名导出到 CSV。每次我尝试执行 export-csv 时,它都会在新行中为每个或其他一些愚蠢的东西提供字符长度计数。
谢谢
解决方案
从输入对象的Export-CSV
成员中读取列名。所以你已经在正确的轨道上,你只需要简化一点,像这样:
$csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
# You can now modify/enrich/filter the data somehow, for example like $csvdata[0].ID = 56387, then just export it:
$csvData | Export-CSV -NoTypeInformation -Path "newfile.csv"
您犯的错误是$csvdata
用Get-Member
结果覆盖导入的数据。@($csvData.Name)
然后你用表达式再次覆盖它。
推荐阅读
- javascript - JS - 使用锚标签链接到主页
- bash - 列出具有子目录的指定路径中具有完整路径和大小的所有文件名
- java - 无法在 Intellij 之外运行 JAR 文件
- javascript - 如何让假浏览器标签集中在多个标签上?
- json - 使用要使用 JSONDecoder 解析的模型的通用值(相对于静态 model.self)
- java - springmvc 获取请求查询字符串参数包装到 pojo
- c# - 在谓词之前使用 .Load() 语句或在 .Include() 语句之后调用我的谓词会更好吗?
- python - 尝试通过变量使用 os.path.exists 但出现错误
- azure-devops - 在 Azure 管道中验证 Swagger 验证器徽章
- python - 如何将mysql查询转换为django orm