2

我想将 csv 文件加载为 numpy 数组。每行包含带空格的字符串字段。我尝试使用 numpy 中可用的 loadtxt() 和 genfromtxt() 方法。默认情况下,这两种方法都将空格视为分隔符,并将字符串中的每个单词分隔为单独的列。无论如何要使用 loadtxt() 或 genfromtxt() 加载此类数据,还是我必须为此编写自己的代码?

我的文件中的示例行:

826##25733##Emanuele Buratti## ##Mammalian cell expression

这里## 是分隔符,空格表示缺失值。

4

2 回答 2

4

我认为您的问题是默认注释字符#与您的分隔符冲突。我能够像这样加载您的数据:

>>> import numpy as np
>>> np.loadtxt('/tmp/sample.txt', dtype=str, delimiter='##', comments=None)
array(['826', '25733', 'Emanuele Buratti', ' ', 'Mammalian cell expression'], 
      dtype='|S25')

您可以看到 dtype 已自动设置为最大长度字符串。dtype=object如果这很麻烦,您可以使用。顺便说一句,由于您的数据不是数字,我可能会建议使用csv模块而不是 numpy 来完成这项工作。

于 2013-05-21T04:05:39.710 回答
1

正如 wim 所建议的,这是 csv 等价物:

import csv

with open('somefile.txt') as f:
    reader = csv.reader(f, delimiter='##')
    rows = list(reader)

正如@wim 指出的评论,这并没有真正起作用,因为分隔符必须是一个字符。因此,如果您更改上述内容delimiter='#',您将得到以下结果:

[['826', '', '25733', '', 'Emanuele Buratti', '', ' ', '', 'Mammalian cell expression']]
于 2013-05-21T04:13:26.750 回答