Python将文本文件读入2D阵列并访问数据

问题描述 投票:0回答:2

我试图将文本文件中的数据读入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,但它作为一维数组,我就是[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

我也尝试了以下代码,再次将其读入1D数组,

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经验,但我很难理解如何加载数组以及如何访问特定数据。

python python-3.x numpy multidimensional-array
2个回答
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

0
投票

您是从文本文件导入它?你能把文本文件保存为csv吗?如果是这样,您可以使用pandas轻松加载数据。

import pandas as pd

data = pd.read_csv(path_to_file)

此外,您可能需要使用以下内容重塑您的numpy数组:

x = x.reshape(-1, 4)

编辑:由于您的格式基于固定宽度,您可能希望在pandas而不是read_csv中使用固定宽度。下面的示例使用宽度8。

x = pd.read_fwf(path_to_file, widths=8)
© www.soinside.com 2019 - 2024. All rights reserved.