我想将csv文件加载为numpy数组。每行包含带空格的字符串字段。 我尝试使用numpy中的loadtxt()和genfromtxt()方法。默认情况下,两种方法都将空格视为分隔符,并将字符串中的每个单词分隔为单独的列。无论如何使用loadtxt()或genfromtxt()来加载这种数据,还是我必须为它编写自己的代码?
我文件中的示例行:
826##25733##Emanuele Buratti## ##Mammalian cell expression
这里##是分隔符,空格表示缺失值。
答案 0 :(得分: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来完成这项工作。
答案 1 :(得分:1)
这是csv等价物,正如wim建议的那样:
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']]