【问题标题】:Merging CSV files合并 CSV 文件
【发布时间】:2014-06-20 16:17:32
【问题描述】:

我正在尝试将多个 CSV 文件合并到一个大型 CSV 文件中。我编写了一个 powershell 脚本,它成功地为每个标签名称创建了单独的 csv 文件。但是当最后添加Get-Content 时,我得到了这个错误:

Get-Content : An object at the specified path C:\HTD2CSV\Output_Files\*.CSV does not exist, or has been filtered by the
 -Include or -Exclude parameter.
At C:\HTD2CSV\extract.ps1:30 char:20
+ $temp = Get-Content <<<<  "$destinationPath\*.CSV" #| Set-Content $destinationPath\merged.CSV
    + CategoryInfo          : ObjectNotFound: (System.String[]:String[]) [Get-Content], Exception
    + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetContentCommand

但我已经在 Output_Files 文件夹中有 CSV 文件。输入Get-Content .\Output_Files\*.CSV 在命令行上运行良好,但显然不是在脚本中。我的代码如下所示:

$currentPath = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)
$sourcePath = "C:\Program Files (x86)\Proficy\Proficy iFIX\HTRDATA"
$destinationPath = "$currentPath\Output_Files"

    @(
        "PPP_VE0963A",
        "PPP_VE0963B",
        "PPP_VE0964A",
        "PPP_VE0964B",
        "PPP_VE0967A",
        "PPP_VE0967B",
        "PPP_ZE0963A",
        "PPP_ZE0963B",
        "PPP_ZE0964A",
        "PPP_ZE0964B"
    ) | ForEach-Object {
        .\HTD2CSV.exe `
            PPP:$_.F_CV `
            /dur:00:23:59:00 `
            /int:00:01:00 `
            /sd:05/01/14 `
            /st:00:00:00 `
            /sp:$sourcePath `
            /dp:$destinationPath\$_.CSV `
            /dtf:0 `
            /dbg:0
    }

Get-Content "$destinationPath\*.CSV" | Set-Content "$destinationPath\merged.CSV"

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    不要使用Get-Content/Set-Content 来合并 CSV(假设您确实有 CSV 而不仅仅是特殊命名的平面文本文件)。使用Import-CsvExport-Csv

    Get-ChildItem '*.csv' | % {
      Import-Csv $_.FullName | Export-Csv 'C:\path\to\merged.csv' -NoType -Append
    }
    

    或这样(避免追加):

    Get-ChildItem '*.csv' | % { Import-Csv $_.FullName } |
      Export-Csv 'C:\path\to\merged.csv' -NoType
    

    【讨论】:

    • 只要表头相同,那么简单的文本与ex合并。 -Skip 1 避免重复标题会更快。 Import-CSV 需要创建大量对象。
    • 刚刚将这些添加到我的脚本中,但在 output_files 文件夹中没有看到 merged.csv。
    • 刚发现Powershell不理解参数“Append”。我正在使用 Powershell 2.0。
    • Frode F. 提出了一个非常好的观点。您的所有 CSV 文件是否都有相同的标题行?
    • @AnsgarWiechers 这是来自同一软件的计算机生成的 csv。他们通常在所有文件中使用相同的格式:) 他们甚至没有标题这一事实使它变得更好,因为您不必担心在合并文件时只保留一份标题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2013-07-19
    • 2021-12-07
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多