通过Powershell向CSV文件添加一行数据

时间:2018-11-25 17:22:46

标签: powershell

我有一个Powershell脚本,该脚本生成带有名称和电子邮件地址的.csv文件。我希望能够在文件顶部添加带有标题的行。

我可以使用文本文件执行此操作,但是由于某种原因,我无法使用.csv文件。建议?

[string]$FileDS = Get-Date -Format "yyyyMMdd"
[string]$outFile = "${outpath}\${members}_${FileDS}.csv"
New-Item -ItemType file $outfile -Force
$object | export-csv -path $outfile

2 个答案:

答案 0 :(得分:1)

如果您想添加到CSV的第一行:

[array]$newRow = "Everything on the new row"
$csv = Get-Content $outFile
$newCSV = $newRow + $csv | Out-File $outFile

要添加到CSV而不删除旧数据:

$newRow | Out-File $outFile -Append

希望对您有帮助。

答案 1 :(得分:1)

CSV格式

有一个IETF标准RFC 4180,它指定如何生成CSV文件以及其可以包含和不能包含的内容。要直接回答您的问题,无法在CSV文件中添加“标题”。总结规范,您的文件需要具有以下内容

  1. 每行数据都使用逗号分隔符(val1,val2,val3)将数据分成几列
  2. 每行结束,新行通过使用回车符(val1,val2,val3 CRLF)开始
  3. 文件的最后一行不包含回车符
  4. 可以以与普通数据行相同的方式添加可选的标题行,并通过包含标题参数来设置

如您所见,没有标准的方法来设置“标题”。但是,如果您将“标题”称为“标题”,则可以使用以下

进行添加
$file = import-csv $outfile -Header a , b , c | export-csv $file

其中a,b,c是您的标题。

数据格式

您的数据应最终看起来如下所示

Header1, Header2, Header3 CRLF
value11, value12, value13 CRLF
value21, value22, value23 CRLF
value31, value32, value32

通过包含以下mimetype参数,标题行被指示为与数据行不同的内容

text/csv; header=present

相反
text/csv; header=absent

您可以看到,唯一的限制是mimetype参数,定界符和回车符。如果字段数据中的数据包含换行符,逗号和/或双引号,则该字段数据将用双引号引起来。为了进一步分解Mimetype,媒体类型为text,子类型为csv,以及两个可选参数:header和charset。

由于规范中明确列出了特殊字符/保留字符以及可选参数,因此我很安全地说无法添加标题行。

其他信息

由于您的最初帖子所指的是规范中未定义的“标题”,所以我会尽我所能尽可能地回答您的问题。 CSV格式是Tabluar Data标准的特定实例。有几种不同的表格数据格式,并且W3C和OKI之类的组织已经创建了标准化,其中包括的功能比RFC 4180标准更多。

您可能想研究CSV模式,我认为它是OKI标准的一部分。同样,这都是基于标准的,因此它实际上取决于使用和解析此CSV文件的方式。

如果您还有其他问题,请随时添加评论,我会尽力答复。

链接

以下链接将带您进入三种表格数据格式的正式规范。如有疑问,我肯定会使用IETF标准,因为它是迄今为止使用最广泛的标准,但是为了防止您的消费应用程序支持它,我将W3C和OKI规范包括在内。

  1. https://tools.ietf.org/html/rfc4180
  2. https://frictionlessdata.io/specs/tabular-data-package/
  3. https://www.w3.org/TR/tabular-data-model/