在尝试找出如何在西班牙 PC(属于客户)上的 Excel 中正确打开 CSV 时,我发现许多答案建议sep=,
在文件顶部使用:
- 在 Excel 中打开带逗号的 CSV 的最简单方法
- 如何控制 CSV 导入 Excel 2010
- 如何在美国版 Excel 中打开以分号分隔的 CSV 文件
- CSV 中的空格或制表符作为分隔符
- 如何让 Excel 将逗号解释为 CSV 文件中的默认分隔符?
从表面上看,这种方法是有效的,但这些答案都没有提供任何进一步的信息在哪里此元数据选项来自哪里。我曾尝试搜索它的含义(并因此找到了所有这些答案),但无法获得任何进一步的信息,尤其是考虑到标点符号是出了名的难以搜索。
我主要关心的是这是否是 Excel 特有的功能。我怀疑是这样的,但没有找到任何确凿的证据来证实。
一些相关问题如下:
- 在这个设置中可以使用哪些字符?
- 还有哪些其他可用设置(例如行终止字符、引号字符等)。
- 还有其他工具正式支持此功能吗?
我希望有人能提供一份文档来解答所有这些问题,甚至更多;但我一直没能找到它。
一些澄清:
不是sep=
解析器的参数。它应该被放置在里面CSV。例如:
sep=|
"LETTER"|"ANIMAL"
"a"|"aardvark"
"b"|"bear"
"c"|"cow"
答案1
RFC 4180被普遍认为是 CSV 格式的标准,但并没有提及任何这样的功能。
W3CWeb 上的表格数据和元数据模型提到它是一项不属于其范围的功能:
许多“CSV”文件都嵌入了元数据,例如在 CSV 文档标题行之前的行中。除了标题行中的列名外,本规范未定义在 CSV 文件中嵌入元数据的任何格式。
因此,虽然我没有找到任何直接证据证明此功能是 Excel 特有的,但显然情况仍然如此,因为似乎没有涵盖该功能的标准化文档。
答案2
指令 sep= 适用于所有使用逗号作为小数分隔符的国家/地区,例如意大利。由于 Excel 在这些国家/地区使用分号而不是逗号导出 CSV,因此如果您想确保文件可以在美国或其他国家/地区读取,您需要
九月=;
位于文件顶部。这是 Excel 特有的,其他应用程序可能会忽略它。
答案3
为了回答您的一个问题:“还有其他工具正式支持此功能吗?”
Apple Numbers 不支持此功能(我已使用 Numbers 版本 3.6.2 进行了测试)。
csv2json 也不支持它(https://www.npmjs.com/package/csv2json)或 csvtojson(https://www.npmjs.com/package/csvtojson)。
答案4
几乎所有能够从 .csv 文件导入的工具都认识到逗号不是唯一可能的分隔符,例如制表符已经很常见了。我认为这甚至可以追溯到打孔卡的时代,需要有一些字符被识别为数据字段的结尾 - 除了使用固定宽度字段或长度前缀字段的系统外,自计算机出现以来,几乎每个系统都需要这样做。
这 3 个要素是字段分隔符、记录分隔符和数据结束标记,csv默认情况下分别使用逗号、换行符和文件结尾来表示这些,但是几乎可以使用任何有效输入,但是,如果特殊标记出现在您的有效数据中,您确实需要一种机制来转义它们。
我遇到过的一个历史系统使用换行符作为字段结尾,使用 2 个空白行作为记录结尾和*!*!* END *!*!*
数据结尾。我经常遇到所有这些,\t|:
字符以及各种控制字符用作字段分隔符。
需要注意的是,法语和其他国家/地区使用逗号作为小数点 - 这会引起各种有趣的游戏。[rfc4180][1] 中对 csv 文件进行了一定程度的标准化,但有时在从一个程序导出并导入到另一个程序时需要手动编辑文件。
为了回答问题的第二部分,例如,Python 包含一个 [csv reader/writer][2] 作为标准库之一,它提供以下选项:
delimiter
- 这是字段分隔符,(除非逃脱)。doublequote
- 如果为真,则"
之内一个字段将表示为""
escapechar
- 从任何后续字符中删除任何特殊含义,例如,如果将其设置为,\
则引号可以表示为\"
lineterminator
-通常为\n
、\r
或之一\r\n
\n\r
quotechar
- 用于引用字符串的字符,通常"
或'
quoting
- 标记为以下之一:ALL
- 每个字段都用引号引起来,例如:"1","Free Beer","ASAP"
MINIMAL
- 仅引用包含特殊字符的字段,即:1,"Beer, (Free)", Now, Please
QUOTE_NONNUMERIC
- 引用任何非数字的内容,例如:1,"Beer, (Free)", "Now", "Please"
NONE
- 不要引用 escape,例如:1,Beer\, (Free), Now, Please
skipinitialspace
- 跳过每个字段的任何前导空格,以便您可以使用,
它而不是仅仅,
作为字段分隔符。
一般来说,一个可以导入 csv 文件的工具越灵活、越周全,它拥有的这些选项就越多(可能名称和/或机制不同)。[1]:https://www.rfc-editor.org/rfc/rfc4180 [2]:https://docs.python.org/2/library/csv.html