Scala:自动检测 CSV 文件中的定界符/分隔符

标签 scala csv split separator opencsv

我正在使用 OpenCSV 库来拆分我的 CSV 文件。现在我需要绝对确定地检测定界符/分隔符字符。 我在网上搜索过,但只找到了创建候选列表并尝试其中一个的示例。我认为这不是最好的方法,因为您可能会出错。 我的拆分器应该在任何 CSV(我无法控制)上正常工作,因此它必须尽可能通用。 大家有好的解决办法吗?

最佳答案

您可能已经看过这个related SO question ,其中列出了一些好的策略,例如计算潜在分隔符出现的次数,和/或在使用假设分隔符时验证每行是否具有相同的列数。

不幸的是,绝对确定性是不可能的,因为该格式不包含在文件中明确指定分隔符的方法。我认为使其尽可能通用的最佳解决方案是让用户指定它何时不是逗号(这就是 opencsv 处理它的方式),或者如果您或他们确定,则允许客户端指定分隔符自动检测失败。如果这不能交互,那么我认为您能做的最好的事情就是记录您认为失败的案例,以便他们稍后处理。

此外,我认为错误率会低于您的预期。我的猜测是,99% 的情况下分隔符都是逗号、分号、句点或制表符。不幸的是,我看到懒惰的编码人员在假设数据不包含字段的情况下使用脱字符号、竖线或波形符之类的东西来分隔字段,因此他们不必进行适当的转义。但这不是常态,也不应该将其视为 CSV。

Python csv 模块有一个 Sniffer猜测分隔符的类(用户提供候选列表);你可能想看看它的 implementation .

关于Scala:自动检测 CSV 文件中的定界符/分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23758093/

相关文章:

java - 使用 SuiteTalk 获取采购订单中的项目

scala - RDD API与结合了DataFrame API的UDF对性能的影响

python - 在没有协同例程的情况下编写良好的 Scala(包括使用 Yield 的 Python 示例)

scala - 在 Scala 中,如何在不知道输出类型或完整类型参数的情况下调用适用于输入类型的多态函数?

python - Pandas:DataFrame.from_dict() 中的分隔符

csv - 将 LISP 数据导入 RapidMiner (CSV,...)

string - 如何将字符串拆分为给定长度的子字符串?

python - 使用 python split 从图像名称中获取文本

python-3.x - Python编辑csv文件的特定行和列

java - 尝试从字符串中检索第一个最长的单词,其中句子包含相同长度的字符串?