在tsv和csv之间选择

在tsv和csv之间选择,csv,tsv,Csv,Tsv,我有一个输出表的程序,我想知道csv和tsv格式之间是否有任何优点/缺点。我认为通常csv比tsv格式更受支持。tsv是Javascript/Perl/Python处理的非常有效的工具,而且不会丢失数据 任何打字信息,也便于人类阅读 自4store公开发布以来,该格式一直受支持,并且 它被合理地广泛使用 我的看法是:CSV用于加载到电子表格中,TSV用于 用于通过定制软件进行处理 您可以使用任何分隔符,但许多应用程序都支持制表符和逗号,包括Excel、MySQL、PostgreSQL。逗号在文本

我有一个输出表的程序,我想知道csv和tsv格式之间是否有任何优点/缺点。

我认为通常csv比tsv格式更受支持。

tsv是Javascript/Perl/Python处理的非常有效的工具,而且不会丢失数据 任何打字信息,也便于人类阅读

自4store公开发布以来,该格式一直受支持,并且 它被合理地广泛使用

我的看法是:CSV用于加载到电子表格中,TSV用于 用于通过定制软件进行处理


您可以使用任何分隔符,但许多应用程序都支持制表符和逗号,包括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
优点:

  • 不必转义分隔符,因为在字段中通常不需要制表符。否则,应将其删除
缺点:

  • 它不那么普遍
做了一个有趣的比较,之后复制到这里。简而言之,使用TSV

比较TSV和CSV格式 TSV和CSV格式之间的差异可能令人困惑。明显的区别是默认字段分隔符:TSV使用制表符,CSV使用逗号。两者都使用换行符作为记录分隔符

就其本身而言,使用不同的字段分隔符并不特别重要。更重要的是数据中出现分隔符的方法。CSV使用转义语法表示数据中的逗号和换行符。TSV采用不同的方法,不允许在数据中使用制表符和换行符

转义语法使CSV能够完全表示常见的书面文本。这非常适合人工编辑的文档,尤其是电子表格。这种通用性有一个成本:读取转义语法需要程序来解析。虽然不太难,但仍然很容易出错,特别是在编写一次性程序时。这是一种很好的做法ice将在处理CSV文件时使用CSV解析器。传统的Unix工具,如
cut
sort
awk
diff
不处理CSV转义,需要其他工具

相比之下,解析TSV数据很简单。可以使用大多数编程语言中的典型
readline
例程读取记录。可以使用
split
例程找到每个记录中的字段。可以通过提供正确的字段分隔符来调用Unix实用程序,例如
awk-F”\t“
排序-t$'\t'
。不需要特殊的解析器。这要可靠得多。它也更快,解析转义语法时不使用CPU时间

速度优势对于面向记录的操作尤其明显。记录计数(
wc-l
),重复数据消除(
uniq
,tsv uniq),文件分割(
head
tail
split
),混洗(GNU
shuf
,tsv sample),等等。tsv速度更快,因为可以使用高度优化的换行搜索例程(例如
memchr
)找到记录边界。识别CSV记录边界需要完全解析每个记录

这些特性使得TSV格式非常适合于数据挖掘和机器学习环境中常见的大型表格数据集。这些数据集很少需要字段中的制表符和换行符

最常见的CSV转义格式使用引号分隔包含分隔符的字段。引号也必须转义,这是通过使用一对引号来表示单个引号来完成的。考虑表中的数据:

场-