首页 > 解决方案 > 通过 Powershell 将一行数据添加到 CSV 文件

问题描述

我有一个 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

标签: powershell

解决方案


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 Schema,我认为它是 OKI 标准的一部分。同样,这一切都基于标准,因此它实际上取决于消耗和解析此 CSV 文件的内容。

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

链接

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

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

推荐阅读