numpy读取带逗号字段的CSV文件吗?

5 投票
3 回答
3798 浏览
提问于 2025-04-17 13:14

我正在尝试使用 numpy.recfromcsv(...) 来读取一个CSV文件,但这个文件中的某些字段里有逗号。这些包含逗号的字段是用引号括起来的,比如 "value1, value2"。但是,Numpy把这个引号里的内容当成了两个不同的字段,所以读取的时候就出问题了。我现在用的命令是

    data = numpy.recfromcsv(dataFilename, delimiter=',', autstrip=True)

我发现了这个问题

在Python中读取包含字段内逗号的CSV文件

但那个方法没有用到 numpy,我其实很想用它。所以我希望这里能有几个选项可以选择:

  1. 有没有什么方法可以替代 numpy.recfromcsv(...),让我能把引号里的字段当作一个整体来读取,而不是分成多个用逗号隔开的字段?
  2. 我需要把我的CSV文件格式改得不一样吗?
  3. (另外一种方法,但不是最理想的)按照引用的问题来读取CSV,之后再进行额外的步骤来创建 numpy 数组。

请给我一些建议。

3 个回答

1

如果你考虑使用Python自带的csv读取器,可以参考Python的文档这里

Python的csv读取器定义了一些可选的Dialect.quotechar选项,默认值是'"'。在csv格式标准中,quotechar是另一种字段分隔符,而分隔符(在你的情况下是逗号)可以包含在被引号包围的字段中。关于csv格式中引号字符的规则,可以在这个页面的第一部分找到清晰的说明。

所以,看起来使用默认的引号字符",Python自带的csv读取器就能在默认模式下解决你的问题。

如果你想继续使用Python,为什么不先清理一下你的csv文件呢?可以用正则表达式来识别被引号包围的字段,然后把分隔符从逗号改成\t,比如说。但这样你实际上是在自己解析csv格式。

2

你可以使用 pandas 来做到这一点:

np_array = pandas.io.parsers.read_csv("file_with_comma_fields_quoted.csv").as_matrix()
0

其实,最简单的方法是使用标准库中的一个模块,叫做 csv,先把文件读进一个元组里,然后再把这个元组作为输入放到一个numpy数组里。我本来希望能直接用numpy来读取文件,但好像这样不太行。

撰写回答