CSV文件可以有评论吗?


203

是否有任何官方方式允许CSV格式的文件在其自己的行或行的末尾包含注释?

我尝试在Wikipedia以及RFC 4180上进行检查,但是两者均未提及任何内容,这使我相信它不是文件格式的一部分,所以这对我来说是很不幸的事,因此我应该使用单独的ReadMe.txt文件来解释文件。

最后,我知道添加自己的注释很容易,但是我希望像Excel这样的东西可以直接将其导入,而无需消费者必须自定义导入过程。

那么,有什么想法吗?


1
您对此有何评论?每行中的值还是文件本身?XML文件是您的替代选择吗?
Square Rig Master

3
该提议被Python否决了。
new123456

2
也许是数据@SquareRigMaster的版本字符串。就像我现在要尝试一样?
罗伯·威尔斯

@SquareRigMaster –或版权声明。
理查德·史密斯

Answers:


116

CSV“标准”(例如它)并没有规定注释的处理方式,不,这取决于应用程序建立约定并坚持使用。


23
RFC 4180现在是标准。
vipw

34
RFC 4180不是标准,rfc4180表示:“此备忘录为Internet社区提供信息。它未指定任何Internet标准。此备忘录的分发是无限的。”
Paul Weibert 2014年

14
好,可以说这是事实上的标准吗?
Marco Sulla'3

1
所有的RFC备忘录不打算提供任何互联网标准AFAIK
USR-本地ΕΨΗΕΛΩΝ

5
是的...这不是真的。有标准跟踪文档和非标准跟踪(信息)文档。整个过程,包括IETF发行文件的描述,过程和规则,均由RFC2026定义,并附有一些后续修订。每个RFC都会在开始时指定它在哪个轨道上。
史蒂夫·霍尔

31

在工程数据中,通常会#在第一栏中看到用于表示评论的符号。

我使用ostermiller CSV解析库来读取和处理此类文件。该库允许您设置注释字符。解析操作后,您将得到一个仅包含实际数据的数组,没有注释。


30

不,CSV没有指定任何标记注释的方式-它们将由Excel等程序作为包含文本的其他单元格进行加载。

您可以管理的最接近的方式(将CSV导入到诸如Excel之类的特定应用程序中)是定义标记Excel将忽略的注释的特殊方式。对于Excel,您可以通过将注释嵌入公式中来“隐藏”(在一定程度上)。例如,尝试将以下csv文件导入Excel:

=N("This is a comment and will appear as a simple zero value in excel")
John, Doe, 24

您仍然在电子表格中的一个单元格中显示数字0,但是该注释已隐藏。

另外,您可以通过简单地用空格填充文本来隐藏文本,这样它就不会显示在单元格的可见部分:

                              This is a sort-of hidden comment!,
John, Doe, 24

请注意,您需要在注释文本后面加上逗号,以便Excel填充以下单元格,从而隐藏文本中不适合该单元格的任何部分。

讨厌的骇客,仅适用于Excel,但它们足以使您的输出在导入后看起来更整洁。


6

我认为向CSV文件添加注释的最佳方法是添加“注释”字段或直接记录到数据中。

我使用的大多数CSV解析应用程序都实现了字段映射和记录选择。因此,要注释字段的属性,请添加仅用于字段描述的记录。要对记录发表评论,请在记录末尾添加一个字段(实际上是所有记录)以供注释。

这是我可以想到注释CSV文件的仅有两个原因。但是我可以预见的唯一问题是,如果任何一条记录未通过某些验证规则,程序将根本拒绝接受该文件。在这种情况下,您将无法为任何数字字段编写字符串类型的字段描述记录。

但是,我绝不是专家,所以请随时指出我的理论中的任何错误。


2
Aaand,我刚刚读到您不想自定义导入过程。不好意思。希望有人觉得有用。
泰勒·芒福德

1
好帖子。我想起为什么要注释的另一个原因是添加一些有关整个文件的元数据。仅使用此信息为一个单元格添加整列或整行,这有点尴尬。
Ben Hershey

3

逗号分隔文件实际上只是一个文本文件,其中的行包含用逗号分隔的值。

没有定义CSV文件内容的标准,因此没有定义的表示注释的方式。这取决于将导入CSV文件的程序。

当然,这通常是Excel。您应该问自己,Excel如何定义注释?换句话说,什么会使Excel忽略CSV文件中的一行(或一行的一部分)?我不知道有什么方法可以做到这一点。


2
There is no standard which defines the contents of a CSV file 假。
Qix-蒙尼卡(Monica)

5
@Qix-从引用文件的第2部分开始:“虽然CSV格式有多种规范和实现(例如[4],[5],[6]和[7]),但在存在”
Alien Technology

3

如果要在批处理文件中使用FOR命令解析文件,则分号有效(;)

REM test.bat contents

for /F "tokens=1-3 delims=," %%a in (test.csv) do @Echo %%a, %%b, %%c

;test.csv contents (this line is a comment)

;1,ignore this line,no it shouldn't

2,parse this line,yes it should!

;3,ignore this line,no it shouldn't

4,parse this line,yes it should!

输出:

2, parse this line, yes it should!

4, parse this line, yes it should!

1
!! 您是真正的赤脚肯·鲍勃吗?
杰弗里·黑尔

2

如果您需要以下内容:

  │ A                              │ B
──┼────────────────────────────────┼───
1 │ #My comment, something else    │
2 │ 1                              │ 2

您的CSV可能包含以下几行:

"#My comment, something else"
1,2

请密切注意第一行中的“引号”。

使用Excel向导将文本转换为列时,请记住选中“将连续的定界符视为一个”,并将其设置为使用“引号”作为定界符。

因此,Excel将以逗号分隔文本,并将“注释”行保持为单个列值(并且它将删除引号)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.