【问题标题】:How to parse CSV file with irregular use of quotes?如何解析不规则使用引号的 CSV 文件?
【发布时间】:2019-10-29 09:24:07
【问题描述】:

我必须解析一个逗号分隔的 CSV 文件,其中包含不规则使用双引号的列。 文件条目如下所示:

"1920,The False Road,American,Fred Niblo,""Enid Bennett, Lloyd Hughes""
"1920,813,American,""Charles Christie, Scott Sidney"",""Wedgwood Nowell, Ralph Lewis, Wallace Beery, Laura La Plante"",mystery

-

+---+------------+-----------------------------------+----+
|   |     A      |      B                            | C  |
+---+------------+-----------------------------------+----+
| 1 | 1920       | Fred Niblo                        | ...|
| 2 | 1920       | ""Charles Christie, Scott Sidney""| ...|
+---+------------+-----------------------------------+----+

如您所见,第一个条目的第 4 列没有引号,第二个条目带有引号。

有没有办法考虑这种不规则使用?

【问题讨论】:

  • 这个没有什么不规则的。每行由换行符分隔,每个字段由逗号分隔。只需用这些参数解析它并将每个"" 替换为"
  • 哦,哇,我的错,我没有意识到这是什么实际结构。这是一个成熟的 CSV ..
  • 我认为您应该添加一个表格来显示您的“csv”的预期解释
  • 您要保持 B 列中的条目不变吗?这两个名字是一个条目还是错误的?
  • 您的样品有什么异常吗?您尝试了什么,遇到了什么问题?

标签: java csv parsing quote


【解决方案1】:

您的 csv 实际上应该如下所示是正确的:

1920,The False Road,American,Fred Niblo,"Enid Bennett, Lloyd Hughes",
1920,813,American,"Charles Christie, Scott Sidney","Wedgwood Nowell, Ralph Lewis, Wallace Beery, Laura La Plante",mystery

(还要注意第一行末尾的额外逗号)

这里,包含逗号的字段用 " 括起来,您可以使用任何 csv 解析器(或库)正确读取。

但不知何故,您的 csv 似乎已转换为单字段 csv。整行都用引号括起来,现有的引号用另一个引号转义(如预期的那样)——除了每行末尾缺少一个结束引号..


要解决此问题,您可以首先在每行末尾添加一个引号,保存文件,然后将其解析为 csv,这将为每一行返回一个单元格(包含所有数据)。

然后您可以将每个单元格的内容写入另一个文件,然后再次将该文件解析为 csv,这应该会为您提供正确的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2017-11-25
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多