使用 powershell 向现有 CSV 文件添加标头

Posted

技术标签:

【中文标题】使用 powershell 向现有 CSV 文件添加标头【英文标题】:Add a header to existing CSV file with powershell 【发布时间】:2021-07-10 22:17:17 【问题描述】:

我有一个包含五列数百行的 CSV 文件。我想为每一列添加一个标题。比如

number Test data1 data2 DataNs
zero test0 random random random
firster test1 random random random
First test2 random random random
Second test3 random random random

我尝试了以下代码,它确实成功添加了标题,但是,它也将所有列合并为一个。这不是我想要的

import-csv $NoHeadersExport -Header 'number', 'Test', 'data1', 'data2', 'DataNs' | export-csv $exportPath  -NoTypeInformation

这段代码指向下表

number Test data1 data2 DataNs
zerotest0randomrandomrandom
firstertest1randomrandomrandom
Firsttest2randomrandomrandom
Secondtest3randomrandomrandom

【问题讨论】:

csv的原始数据是什么?什么是分隔符/定界符? @GuentherSchmitz 是逗号 这很奇怪。 1. 分号从何而来? 2.为什么第二行没有? @GuentherSchmitz 抱歉,这些分号是另一个试错代码的输出。我现在把桌子修好了。 【参考方案1】:

使用纯文本你可以这样做:

    获取 csv(没有标题)并将其存储在变量中

    $csvContent = Get-Content C:\path\to\file.csv -Raw
    

    将标题行创建为字符串

    $csvHeader = '"number","Test","data1","data2","DataNs"'
    

    结合这两个变量

    $csvContentWithHeader = $csvHeader,$csvContent -join "`n"
    

    将带有标题的 CSV 保存为文件

    Out-File -FilePath C:\path\to\fileWithHeader.csv -InputObject $csvContentWithHeader
    

【讨论】:

现在情况正好相反,列都在那里,但它只将标题添加到第一列,语法如下number,"Test","data1",data2","DataNs" 那么请提供原始数据【参考方案2】:

我创建了另一个 CSV 文件,然后将两者与以某种方式起作用的 Add-Content 命令合并。

#file that has all the columns but no header
$withoutheaders = "C:\export.csv"
#blank csv
$headersonly = "C:\headers.csv"
Set-Content $headersonly -Value "number,Test,data1,data2,DataNs"
$addheaders = Get-Content -Path $withoutheaders
Add-Content -Path $headersonly -Value $addheaders

【讨论】:

【参考方案3】:

如果您从标题名称中删除单引号,您的方法应该可以工作。

    import-csv $NoHeadersExport -Header number,Test,data1,data2,DataNs | export-csv $exportPath  -NoTypeInformation

【讨论】:

以上是关于使用 powershell 向现有 CSV 文件添加标头的主要内容,如果未能解决你的问题,请参考以下文章

如何向现有代码添加分页?

向 CSV 文件添加新行

向现有房间数据库添加一列,同时使用房间版本 2.4.0-alpha01 中提供的当前自动迁移功能

如何通过对现有列执行一些转换来使用 withcolumn 添加列?

Powershell企业应用 - 第05章 编写Powershell日志系统

使用 PowerShell 将多个 CSV 文件合并为一个