小编典典

自动检测文件中CSV标头的存在

algorithm

简短的问题: 如何自动检测CSV文件的第一行是否包含标题?

详细信息:我编写了一个小型CSV解析引擎,将数据放入一个对象,该对象可以作为(大约)内存数据库来访问。原始代码用于解析具有可预测格式的第三方CSV,但我希望能够更广泛地使用此代码。

我正在尝试找出一种可靠的方法来自动检测CSV标头的存在,因此脚本可以决定是将CSV文件的第一行用作键/列名,还是立即开始解析数据。由于我需要的只是一个布尔测试,因此我自己检查CSV文件后就可以轻松指定一个参数,但是我不想(去自动化)。

我想我必须解析前3个?CSV文件的行,然后查找某种模式以与标题进行比较。我遇到了以下三种特别糟糕的情况的噩梦:

  1. 标头出于某种原因包含数字数据
  2. 前几行(或CSV的大部分)为空
  3. 标题和数据看起来太相似,无法区分

如果我可以得到“最佳猜测”,并使解析器因错误而失败,或者如果解析器无法做出决定,则发出警告,那就可以了。如果这在时间或计算方面将是非常昂贵的(并且要花费比为我节省的时间更多的时间),那么我会很乐意放弃这个想法,然后重新着手“重要的事情”。

我正在使用PHP,但这使我更感兴趣的是算法/计算问题,而不是特定于实现的问题。如果有一个简单的算法可以使用,那就太好了。如果您能指出一些相关的理论/讨论,那也很好。如果有一个大型图书馆进行自然语言处理或300种不同的解析,那么我就不感兴趣。


阅读 314

收藏
2020-07-28

共1个答案

小编典典

正如其他人指出的那样,您无法做到100%可靠。在某些情况下,“基本正确”是很有用的-
例如,具有CSV导入功能的电子表格工具通常会尝试自行解决。以下是一些试探法,它们倾向于指示第一行 不是 标题:

  • 第一行的列不是字符串或为空
  • 第一行的列并不是唯一的
  • 第一行似乎包含日期或其他常用数据格式(例如xx-xx-xx)
2020-07-28