我正在寻找一些关于处理 csv 和制表符分隔文件的最佳实践。
对于 CSV 文件,如果值包含逗号或双引号,我已经在进行一些格式化,但如果值包含换行符怎么办?我应该保持新行不变并将值用双引号括起来+转义值中的任何双引号吗?
制表符分隔文件的相同问题。我假设答案会非常相似,如果不一样的话。
我正在寻找一些关于处理 csv 和制表符分隔文件的最佳实践。
对于 CSV 文件,如果值包含逗号或双引号,我已经在进行一些格式化,但如果值包含换行符怎么办?我应该保持新行不变并将值用双引号括起来+转义值中的任何双引号吗?
制表符分隔文件的相同问题。我假设答案会非常相似,如果不一样的话。
通常,您\n
在利用换行符将包含在" "
字符串中的事实时保持不变。这不会产生歧义,但是如果您必须使用普通的文本编辑器查看文件,那真的很难看。
但这是您应该做的,因为除了双引号本身之外,您不会转义 CSV 中字符串内的任何内容。
@Jack 是对的,你最好的选择是保持\n
不变,因为如果是这种情况,你会期望它在双引号内。
与大多数事情一样,我认为这里的一致性是关键。据我所知,您的值仅在跨越多行、包含逗号或包含双引号时才需要双引号。在我见过的一些实现中,所有值都被转义和双引号,因为它使解析算法更简单(从来没有转义和双引号的问题,而读取 CSV 则相反)。
这不是最优化空间的解决方案,但是对于您自己的库和将来可能使用它的其他人来说,读取和写入文件是一件微不足道的事情。
对于 TSV,如果您想要无损表示值,“线性 TSV”规范值得考虑: http: //paulfitz.github.io/dataprotocols/linear-tsv/index.html
出于显而易见的原因,大多数此类约定至少遵循以下内容:
\n for newline,
\t for tab,
\r for carriage return,
\\ for backslash
一些工具\0
为 NUL 添加。