Python Numpy.loadtxt具有各种字符串条目但知道行格式

时间:2013-11-21 13:11:18

标签: python arrays numpy

忙着专门研究loadtxt的限制。我有一个多维数组:

# Sample header for python loadtxt
Very random text:¤mixed with¤strings¤numbers
300057¤9989¤34956¤1
110087¤9189¤24466¤4
# EOF

我可以将所有内容读作字符串(未知长度),然后转换为整数和浮点数。我在这里:

import numpy as np
txtdata = np.loadtxt('Mytxtfile.txt',delimiter=chr(164),comments="#",dtype='str')

但是我想知道是否可以直接提取到多维数组中。如:

>>> 
[['Very random text:','mixed with','strings','numbers']
 [300057,9989,34956,1]
 [110087, 9189, 24466, 4]]

我尝试了这个dtype命令没有成功:

dtype=[('a', 'str'),('b','int'),('c','int')]

1 个答案:

答案 0 :(得分:2)

txtdata = np.loadtxt(
    'Mytxtfile.txt', delimiter=chr(164), comments="#", skiprows=1,
    dtype=[('a', '|S6'), ('b', '<i4'), ('c', '<i4'), ('d', '<i4')])

您的示例数据显示了4列,因此要明确指定dtype,您需要以下内容:

dtype=[('a', '|S6'), ('b', '<i4'), ('c', '<i4'), ('d', '<i4')]

请注意,NumPy没有可变宽度'str' dtype。您必须提前指定字节数。例如,'|S6'指定一个6字节的字符串dtype。

如果你事先不知道字符串列中可能有多少字节,那么使用numpy.genfromtxt可能更方便:

txtdata = np.genfromtxt('Mytxtfile.txt', delimiter=chr(164), comments="#",
                        names=True, dtype=None)

dtype=None告诉genfromtxt对dtype进行智能猜测。