我正在尝试将数据从文本文件读取到2D数组中,然后访问数据的每个元素。我尝试了多种方法,但无法访问数据的每个元素,
这里是数据的摘录,
GRID 16 7.5 5.961539 0.
GRID 17 7.5 11.92308 0.
GRID 18 7.5 17.88461 0.
GRID 19 7.5 23.84615 0.
GRID 20 7.5 29.80769 0.
GRID 21 7.5 35.76923 0.
GRID 22 7.5 41.73077 0.
GRID 23 7.5 47.69231 0.
GRID 24 7.5 53.65384 0.
使用此处的示例Import nastran nodes deck in Python using numpy
它可以导入OK,但是它是一维数组,例如,我是“ ary [1,1]”,我得到以下响应,
x[1,1]
Traceback (most recent call last):
File "<ipython-input-85-3e593ebbc211>", line 1, in <module>
x[1,1]
IndexError: too many indices for array
我希望的是,
17
我还尝试了以下代码,并再次将其读入一维数组,
ary = []
with open(os.path.join(dir, fn)) as fi:
for line in fi:
if line.startswith('GRID'):
ary.append([line[i:i+8] for i in range(0, len(line), 8)])
我得到以下错误,
ary[1,2]
Traceback (most recent call last):
File "<ipython-input-83-9ac21a0619e9>", line 1, in <module>
ary[1,2]
TypeError: list indices must be integers or slices, not tuple
我是Python的新手,但是我确实有使用VBA的经验,在VBA中我经常使用数组,但是我一直在努力了解如何加载数组以及如何访问特定数据。
答案 0 :(得分:1)
您可以使用genfromtxt
功能。
import numpy as np
ary = np.genfromtxt(file_name, dtype=None)
这将自动加载文件并检测字段类型。现在,您可以按行或按列访问ary
,例如
In: ary['f1']
Out: array([16, 17, 18, 19, 20, 21, 22, 23, 24])
In: ary[2]
Out: (b'GRID', 18, 7.5, 17.88461, 0.)
或按单个元素:
In: ary[3]['f1']
Out: 19
In: ary['f1'][3]
Out: 19
答案 1 :(得分:0)
您要从文本文件导入它吗?您可以将文本文件另存为csv吗?如果是这样,您可以轻松地使用熊猫加载数据。
import pandas as pd
data = pd.read_csv(path_to_file)
另外,可能您只需要使用类似以下方法来重塑numpy数组即可:
x = x.reshape(-1, 4)
编辑: 由于您的格式是基于固定宽度的,因此您希望使用熊猫中的固定宽度而不是read_csv。下面的示例使用8的宽度。
x = pd.read_fwf(path_to_file, widths=8)