为什么我们继续使用CSV?[关闭]


14

为什么我们继续使用CSV?

我最近转而使用卫生领域,尽管在数据传输标准方面做得很出色,但是所有数据传输都采用CSV格式,既可以报告给外部组织,也可以用于在实施新系统时进行数据迁移。

不幸的是,使用CSV导致无休止的重复同样的愚蠢错误,同时也浪费了开发时间。(转义错误,无法处理空字段等)

我知道我们可以做得更好,并且JSON和XML之间的任何内容(取决于实例)都可以。(大多数情况下,这是从一个MS SQLserver 2005到另一个的数据!)

我觉得好像每次看到这种情况时,我实际上都是在看着一个开发人员在浪费别人的时间。

那么,为什么我们要保持轴心呢?我们什么时候停止?


20
如果您只是进入健康领域并且认为CSV不好,请等到遇到HL7为止!
G__

3
@Greg LOL,别吓him他,惊喜总是最好的:)
James Love

47
-1这是针对CSV以外的问题的反CSV指令。如果您在没有库的情况下读写XML,您会怎么想?您的问题将恶化一百倍。
杰西·米利坎

12
“那为什么我们要一直保持轴心状态?什么时候停止?” 我不知道,在我工作的地方,我们设法很好地使用了CSV,而没有任何人感到困惑(实际上-正是XML阶段令人沮丧)。也许您和您的同事做错了什么?
FrustratedWithFormsDesigner

3
到目前为止,所有讨论都忽略了CSV的一个非常实际的问题:定界符很可能出现在数据中,并且CSV对于该问题的处理方式并非最佳(将数据引号引起问题只会将问题推到下游) 。更好的方法是使用管道分隔文件。
拉里·科尔曼

Answers:


10

在您的情况下,由于缺乏严格的规范,因此CSV似乎不太适合。

对于非平凡的数据,这不是正确的选择。

为什么/何时CSV是一个不错的选择?可能要提及的实例太多了,简单化平面数据的好处显而易见。只要正确地清理/清除了数据,就不会有问题。一般来说,所有这些情况都是简单的/琐碎的。当然,出现在内容中的标准分隔符在处理CSV时通常很麻烦。

但是,如果您要进行更多的工作,而不是让非技术客户从Excel工作表或其他类似用例发送数据,则CSV可能不足以进行任何严肃的使用。

XML非常适合(甚至比JSON更适合),因为您可以为其进行详细的标准化架构规范。(更不用说规范/方案享有多种实现样式(XSD,DTD和Relax NG)的灵活性)

对于闭环系统,尤其是在考虑带宽的情况下,JSON比XML更适合,但由于缺少架构规范语言,通常使JSON无法用于企业级应用程序。


3
确实是“只要对数据进行了正确的清理/清除”。但是,对于许多程序员来说,似乎可以通过使用自己的代码(使用伪代码write('"');write(fld1);write('"');作呕)来编写自己的代码,从而弄错这一点。然后,他们错过了在某事上加上引号的想法。然后他们编写自己的解析器。...–
Gerry

3
是的,您自己动手的船员真的应该开始使用此Internet东西,也许甚至学会这个词的含义……图书馆。
ocodo 2011年

分享信息!可重复使用的代码!愚蠢的新想法。重复别人的错误对我50岁的曾祖父来说已经足够了,对我来说也足够了!
Steve314 2011年

@ Steve314-/ me“使人既恐惧又娱乐。”
ocodo 2011年

但是CSV确实有严格的规范。现在,我们的问题是通常的问题-Excel不符合100%的要求。
gbjbaanb 2015年

63

让我抛出一些赞成CSV的观点:

  • CSV易于实现(比OP中建议的任何替代方案都要实现)
  • 几乎所有星球上的软件(过去和现在)都可以理解CSV
  • CSV强制使用相当平坦,简单的架构(只有一个单一的字段列表)
  • CSV比XML,JSON或(UGH!)HL7(V2.x,pre-xml)更具人类可读性

14
您不必扮演“魔鬼拥护者”……您提出的所有观点都是完全正确的,并解释了为什么仍使用CSV的原因。它只是简单得多。
GrandmasterB,

7
@Stephen:您知道CSV有多少种不同的形式?
FrustratedWithFormsDesigner

3
@FrustratedWithFormsDesigner您能想到多少个转义约定?
斯蒂芬,

3
@Pierre 303我希望这是白痴的证明。如果开发人员证明我会很高兴。
斯蒂芬,

8
@ Pierre303,白痴证明...如果您认为自己已经“白痴证明”了某些东西,则说明您没有用足够的白痴进行测试。
ocodo 2011年

29

向后兼容。如果您的外部组织网络服务处理CSV,并且您所有现有的工具都处理CSV,那么任何一方都没有动力迁移到新服务。为什么您的外部组织会开始支持其他格式?与他们合作的人都无法使用它!为什么要开始制作其他格式?您与之合作的组织都不接受!

我在这里看到的真正问题是,为什么您的开发人员每次都要滚动自己的CSV代码?如果他们使用稳定的坚如磐石的CSV库,那么他们就不会遇到您描述的问题。这些问题是由开发人员使用自己的解决方案而不是使用库引起的,老实说,我看不到转向JSON或XML如何神奇地解决了这一问题。您仍然会有人尝试对它们进行正则表达式,而不是使用库。


4
每次滚动+1。我看到开发人员不学习,而不是有缺陷的数据格式。:-)
G__11年

“向后兼容”-您当然是正确的-但不向前迈进会花费数千美元。
斯蒂芬,

滚动自己的CSV库很好...只需重新使用它即可!
GrandmasterB

5
@Stephen:不,每次需要时重新实现CSV都要花费数千美元。CSV作为一种格式很好,但是无法正确处理的开发人员就是问题所在。
Anon。

6
@Stephen:那么您使用CSV的问题是它太简单了,您想要更复杂的东西吗?
Anon。

15

CSV 速度更快尺寸更小,非常易于处理(甚至在Excel中),并且许多现有应用程序都了解它,它是一种广泛使用的标准

在许多情况下,它仍然是首选。

我个人仍然很喜欢这种格式。但是我也使用JSON,但用于Web UI等其他应用程序。


1
除了最初使用“一点”外,我完全同意这一点。
2011年

3
如果您有需要保留前导零的数据,它可能是Excel的绝对基础……问我怎么知道!...除了Excel提供了一个很好的界面。
Dal

@Dal:我曾经在一个信用合作社工作,不得不处理包含信用卡号的CSV文件。其中有16位数字。这Excel的四舍五入为15
dan04

或更糟糕的是,它将它们转换为科学计数法。:(我记得我第一次在ACH处理过程中遇到错误,即一个远程帐号无效,只是发现有人在excel中编辑了csv(只删除了一行),并且更改了30个数字帐号输入到2.3456356e29中,等等
cabbey 2011年

1
@Jeanne:如果CSV实际上像JSON一样具有数字/字符串区别,那么很容易告诉Excel值的类型。这些问题很大程度上归因于CSV的字符串输入。
dan04 2011年

15

首先,因为即使消费 CSV数据可能(微不足道)也不是一件容易的事,但生成它却非常容易。

我还要指出,无论是JSON还是XML,对于生产者或消费者而言,都不容易实现。实际上,几乎没有人会四处看看,以至于很多人都试图使用正则表达式来解析XML数据,尽管绝对没有疑问这样做不会也不会奏效。

CSV可能(或确实)产生的大多数问题也可能(且确实)同时出现在JSON和XML中。尤其是XML,本身就增加了许多潜在的问题。与用于CSV数据的类似库相比,用于解析XML数据的库通常更大,更慢并且更难使用。


1
看起来正确地制作它是非常容易的,当您拥有非平凡的数据时,消费缺少规格的东西是非平凡的。
斯蒂芬·

2
@Stephen:请注意,我在第一句话中没有 “正确地”加入。它的遗漏是故意的!
杰里·科芬

4

首先,我同意格式存在一些非常实际的问题:

  • 它是字符串输入。
    • 在不区分文本和数字值的情况下,Excel会猜错并弄乱您的邮政编码和信用卡号。
    • 没有标准的方法来表示二进制数据。
    • 没有标准的方法来区分NULL'',这是将CSV文件导入SQL数据库时的问题。
  • 对“特殊字符”的支持不佳。
    • 缺少数字字符引用(如XML &#xNNNN;或JSON \uNNNN)意味着没有标准的方法来表示控制字符或非ASCII字符。
    • 许多实现没有正确实现字段内的换行符。
  • 缺乏标准。有RFC 4180,但并未得到普遍遵循。

但另一方面:

  • 替代方案更糟。围绕树设计的JSON和XML不适合基于表的数据,特别是在...方面。
  • 紧凑! 在XML中,每一行的每一列都必须有一个开始标记和一个结束标记。在CSV中,您只需写入一次列标题。
  • CSV很容易生成。
  • 非程序员可以在Excel中打开CSV文件。

相反; 在excel中使用此数据将构成犯罪,CSV很容易产生错误,紧凑性不是问题,树木更适合此数据。
斯蒂芬,

4

因为许多分析师都使用Excel(用于数据透视表等),所以输出CSV比输出本机Excel格式容易得多。

脚注:鉴于我在处理CSV文件时遇到了很多问题,例如删除前导零和降低精度,这可能是一种错误的感觉,即变得更容易。


这个+1000。Excel是杀手级应用程序(一旦您知道它),可用于快速而肮脏的数据分析。能够导出到Excel为商业,研究等领域的非开发人员提供了强大的力量。Excel遍布世界。CSV导出运行Excel。
johannes

2

如果CSV出了点问题,那就是CSV看起来很简单,以至于许多开发人员尝试发明自己的解析器/编写器,后来又指责CSV无法正确处理转义。有了一个好的CSV解析器(那里有很多很好的解析器),根本不会有问题。

有人提到CSV不适用于非平凡的数据,但我不同意。XML允许使用非平凡的数据,因为可以将不同的数据集放在不同的“容器”标签中。使用CSV,您始终可以将不同的数据放入不同的文件中,以达到相同的效果。

此外,在我看来,使用XML进行数据传输从根本上违反了XML的目的-数据传输通常意味着提供者和使用者之间的稳定合同,而XML旨在携带可扩展的信息,在使用时将接受解释。


1

我猜想当您只有简单的文本数据,并且只有逗号和结尾处的分号/结尾时,CSV会很好。

树结构数据或复合数据几乎不能与CSV一起使用。

CSV只是Excel中纯文本的2D数组,没什么...


1

这实际上是关于大型机的,并且在这里表现出色。

大型机,因为那些旧系统弄清楚了如何使用CSV进行通信。因此,转储数据的大型应用程序可以读取和写入数据,而无需立即更改。

Excel,因为它可以直接打开CSV。实际上,安装时它将接管.csv扩展名。用户只需单击略显有趣的excel图标,它就会打开并制作一个不错的网格供他们纠缠。

现在,现代版本的excel非常有能力直接读取XML。但是,这样做,用户必须对“双击该图片”有更多的了解。在某些行业中,双击正确的图片可能要求太多。。。


-1

我看到了很多技术答案,但我怀疑人们使用CSV的原因与人们使用许多其他技术的原因相同:因为这是他们最熟悉的技术/ 原因


-1

为什么要使用它?

  1. 客户想要
  2. 网络上的速度比xml快(网络负载较小)
  3. 不需要任何复杂的操作即可获得数据
  4. 跨平台
  5. 可读
  6. 易于实现读者和作家

等等等

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.