The dtype
指定二进制数据在内存中的布局。它不定义文件中文本的格式。
您的数据文件具有固定宽度的字段。即每个字段使用八个字符,并且没有特殊的分隔符来分隔字段。您可以使用读取这样的文件numpy.genfromtxt http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html,通过指定字段宽度delimiter
争论。
这是 ipython 会话中的一个示例。首先,这是您的示例文件。 (我编辑了文件以确保最后一个后面有三个空格05
在第二行和第三行,但这不是必需的。)
In [15]: !cat nastran_data.txt
$ MH Nodes
$2345678$2345678$2345678$2345678$2345678$2345678
GRID 25601 58.50002-57.749923.05
GRID 25602 58.81002-57.749923.05
这是要创建的数组的数据类型genfromtxt
。请注意,GN
字段有类型np.int64
,以及X
, Y
and Z
字段有类型np.float64
.
In [16]: dt = np.dtype([('Grid', 'S8'), ('GN', np.int64), ('Prop', 'S8'), ('X', np.float64), ('Y', np.float64), ('Z', np.float64)])
使用读取文件genfromtxt
,有六个固定宽度字段,每个长度为 8:
In [18]: a = np.genfromtxt('nastran_data.txt', dtype=dt, delimiter=(8, 8, 8, 8, 8, 8), skip_header=2)
In [19]: a
Out[19]:
array([('GRID ', 25601, ' ', 58.50002, -57.7499, 23.05),
('GRID ', 25602, ' ', 58.81002, -57.7499, 23.05)],
dtype=[('Grid', 'S8'), ('GN', '<i8'), ('Prop', 'S8'), ('X', '<f8'), ('Y', '<f8'), ('Z', '<f8')])
In [20]: a['GN']
Out[20]: array([25601, 25602])
In [21]: a['X']
Out[21]: array([ 58.50002, 58.81002])