使用 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 文件添加标头的主要内容,如果未能解决你的问题,请参考以下文章
向现有房间数据库添加一列,同时使用房间版本 2.4.0-alpha01 中提供的当前自动迁移功能
如何通过对现有列执行一些转换来使用 withcolumn 添加列?