【问题标题】:merge several .csv files into one array将多个 .csv 文件合并为一个数组
【发布时间】:2017-09-25 17:40:17
【问题描述】:

我正在尝试将多个 .csv 文件(具有相同的列)从不同的目录加载到同一个数组中。

$csv1 = Import-Csv "PATH1"
$csv1 = Import-Csv "PATH2"
$csv1 | Export-Csv C:\test.csv

这只是输出最后加载的 .csv,最好的方法是什么?

【问题讨论】:

  • 嘿,如果我可以停止导入第二个 .csv 文件的标题,这应该是诀窍?
  • 发现我可以使用第二个 csv 文件上的 += 将其添加到数组中。谢谢
  • @TessellatingHeckler - Get-Content ...| Set-Content ... 可能“有效”,但如果它是标准格式的 CSV(第一行是标题),他最终会在中间有一条重复他的标题的记录,例如,Name="Name" Address="Address" 等。他使用+= 的解决方案更好。
  • 嘿@JeffZeitlin,如果我想每行添加一个额外的列,说明文件来自哪个路径,我该怎么做?
  • @JeffZeitlin 当您可以在Add-MemberSelect-Object 上使用-PassThru 来创建计算属性时,无需创建新对象。 @Bunion 这是一个添加该属性的衬里:($(Import-Csv "PATH1" | Add-Member -Name "SourcePath" -Value "PATH1" -MemberType NoteProperty -PassThru) + $(Import-Csv "PATH2" | Add-Member -Name "SourcePath" -Value "PATH2" -MemberType NoteProperty -PassThru)) | Export-CSV C:\test.csv

标签: powershell csv merge


【解决方案1】:

如有疑问,请阅读documentationImport-Csv cmdlet 接受路径字符串数组作为输入,因此您需要做的一切(假设所有 CSV 具有相同的字段)如下所示:

$src = 'C:\path\to\input1.csv', 'C:\path\to\input2.csv', ...
$dst = 'C:\path\to\output.csv'

Import-Csv $src | Export-Csv $dst -NoType

如果您想要一个包含源文件路径的附加列,则需要一些额外的步骤:

$src | ForEach-Object {
  $path = $_
  Import-Csv $path | Select-Object *,@{n='Path';e={$path}}
} | Export-Csv $dst -NoType

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多