当前位置: 首页 > 面试题库 >

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

胡彭亮
2023-03-14
问题内容

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

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

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

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

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

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

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


问题答案:

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

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


 类似资料:
  • !define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeave !insertmacro MUI_PAGE_DIRECTORY Function DirectoryLeave IfFileExists "$INSTDIR\*.*" 0 +3 MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \ "The desti

  • 我需要根据传入的消息构建一个csv文件。为此,我将以下内容附加到文件: 虽然这工作正常,但我遇到了一个问题。我还需要在CSV文件中包含一个标题行。现在我正在使用. mashall(). csv()编组成CSV格式,但这省略了标题。 虽然我可以创建一个CSV格式,标题为: 这将为我添加的每一行添加标题行。因此,我想要实现的是仅在创建新文件时添加标题。 我尝试了两种方法,但都没有成功: 检查路由中是否

  • 问题内容: 我编写了一个Python脚本,用于合并两个csv文件,现在我想在最终的csv中添加标头。我尝试按照此处报告的建议进行操作,但出现以下错误:。解决此问题的最有效方法是什么? 这是我正在使用的代码: 问题答案: 该班预计 字典 的每一行。如果您只想编写一个初始标头,请使用常规并在标头的简单行中传递: 另一种方法是在跨数据复制时生成字典:

  • 我有一个文件。我想使用此文件创建文件。这是文件的格式。这是我的文件的一小部分。我的原始文件中还有60000多行。 我想按如下方式保存这些文件。在这里“通过”列要检查。在False之后是False然后True,然后又是True等等,所以我想使用它来保存文件。例如,我想保存此文件首先将False值保存为False1.csv然后其次是True1.csv然后再次满足False2.csv我想在文件名中添加数

  • 问题内容: 我有具有main.c main.h和CMakeLists.txt的示例程序目录 main.h的内容是 main.c的内容是 和CMakeLists.txt 但是cmake不会在修改头文件时重建main.c。我希望它自动生成头文件依赖项。有可能使用cmake吗? 如果没有,还有其他工具可以做到吗? 问题答案: 如我的评论中所述,我已经尝试了您的示例,并且一切正常:如果进行了修改,则将重新

  • 假设我给出了三个指向Spark上下文的文件路径来读取,每个文件的第一行都有一个模式。如何从标题中跳过模式行? 现在,我们如何从这个RDD跳过标题行呢?

  • 我在OS X 10.6.8上运行PostgreSQL 9.2.6。我想从带有列标题的CSV文件导入数据到数据库。我可以用语句做到这一点,但前提是我首先手动创建一个表,其中包含CSV文件中每个列的列。有没有办法根据CSV文件中的标题自动创建此表? 每个问题我都试过了 但我只是得到了这个错误: 如果我首先创建一个没有列的表: 创建测试表 我得到: 我在PostgreSQL COPY文档中找不到任何关于