在tsv和csv之间选择
我有一个输出表的程序,我想知道csv和tsv格式之间是否有任何优点/缺点。我认为通常csv比tsv格式更受支持。tsv是Javascript/Perl/Python处理的非常有效的工具,而且不会丢失数据 任何打字信息,也便于人类阅读 自4store公开发布以来,该格式一直受支持,并且 它被合理地广泛使用 我的看法是:CSV用于加载到电子表格中,TSV用于 用于通过定制软件进行处理在tsv和csv之间选择,csv,tsv,Csv,Tsv,我有一个输出表的程序,我想知道csv和tsv格式之间是否有任何优点/缺点。我认为通常csv比tsv格式更受支持。tsv是Javascript/Perl/Python处理的非常有效的工具,而且不会丢失数据 任何打字信息,也便于人类阅读 自4store公开发布以来,该格式一直受支持,并且 它被合理地广泛使用 我的看法是:CSV用于加载到电子表格中,TSV用于 用于通过定制软件进行处理 您可以使用任何分隔符,但许多应用程序都支持制表符和逗号,包括Excel、MySQL、PostgreSQL。逗号在文本
您可以使用任何分隔符,但许多应用程序都支持制表符和逗号,包括Excel、MySQL、PostgreSQL。逗号在文本字段中很常见,因此如果转义它们,则需要转义更多的逗号。如果您不转义它们,并且字段可能包含逗号,那么您就不能自信地在文件上运行“sort-k2,4”。您可能需要转义字段中的某些字符(空字节、换行符等)。出于以上原因,我更喜欢在字段中使用TSV、转义选项卡、空字节和换行符。此外,使用TSV通常更容易。只需按制表符分隔符拆分每一行。对于CSV,有带引号的字段,可能有带换行符的字段等。我仅在被迫使用CSV时才使用CSV。选择取决于应用程序。简而言之,如果您的字段不包含逗号,请使用CSV;否则,TSV就是出路 TL;DR 在这两种格式中,当分隔符出现在字段中时会出现问题,因此有必要指出分隔符不是用作字段分隔符,而是用作字段中的值,这可能有点痛苦 例如,使用CSV:
Kalman,Rudolf
,von Neumann,John
,Gabor,Dennis
其中包括:
- 删除字段中显示的所有分隔符
例如,
,Kalman-Rudolf
,von Neumann-John
Gabor-Dennis
- 转义字符(通常预先附加反斜杠
) 例如,\
,Kalman\,Rudolf
,von Neumann\,John
Gabor\,Dennis
- 用其他字符将每个字段括起来(通常是双引号
) 例如“
,“Kalman,Rudolf”
,“von Neumann,John”
“Gabor,Dennis”
,
例如:
Name,Score,Country
Peter,156,GB
Piero,89,IT
Pedro,31415,ES
Name<TAB>Score<TAB>Country
Peter<TAB>156<TAB>GB
Piero<TAB>89<TAB>IT
Pedro<TAB>31415<TAB>ES
优点:
- 与非技术人员共享时,它更通用、更有用, 因为大多数软件包都可以在不使用 设置
- 在字段中转义逗号可能会令人沮丧,因为 每个人都遵守标准
- 所有额外的转义字符和引号都会增加最终文件大小的权重
或\t
例如:
Name,Score,Country
Peter,156,GB
Piero,89,IT
Pedro,31415,ES
Name<TAB>Score<TAB>Country
Peter<TAB>156<TAB>GB
Piero<TAB>89<TAB>IT
Pedro<TAB>31415<TAB>ES
namescore国家
彼得156GB
皮耶罗
佩德罗31415ES
优点:
- 不必转义分隔符,因为在字段中通常不需要制表符。否则,应将其删除
- 它不那么普遍
cut
、sort
、awk
和diff
不处理CSV转义,需要其他工具
相比之下,解析TSV数据很简单。可以使用大多数编程语言中的典型readline
例程读取记录。可以使用split
例程找到每个记录中的字段。可以通过提供正确的字段分隔符来调用Unix实用程序,例如awk-F”\t“
,排序-t$'\t'
。不需要特殊的解析器。这要可靠得多。它也更快,解析转义语法时不使用CPU时间
速度优势对于面向记录的操作尤其明显。记录计数(wc-l
),重复数据消除(uniq
,tsv uniq),文件分割(head
,tail
,split
),混洗(GNUshuf
,tsv sample),等等。tsv速度更快,因为可以使用高度优化的换行搜索例程(例如memchr
)找到记录边界。识别CSV记录边界需要完全解析每个记录
这些特性使得TSV格式非常适合于数据挖掘和机器学习环境中常见的大型表格数据集。这些数据集很少需要字段中的制表符和换行符
最常见的CSV转义格式使用引号分隔包含分隔符的字段。引号也必须转义,这是通过使用一对引号来表示单个引号来完成的。考虑表中的数据:
场-