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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python将文本文件读入2D阵列并访问数据相关的知识,希望对你有一定的参考价值。

我试图将文本文件中的数据读入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经验,但我很难理解如何加载数组以及如何访问特定数据。

答案

你可以使用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
另一答案

您是从文本文件导入它?你能把文本文件保存为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)

以上是关于Python将文本文件读入2D阵列并访问数据的主要内容,如果未能解决你的问题,请参考以下文章

c++ 将文本文件中的 3 列读入 2D 数组或 3 个单独的数组

将大型文本文件读入数据框中以在 Python 中进行数据分析

Python:如何将两个空行之间的文本读入字符串

python 使用恒定空间,将2d阵列向右旋转90度

如何将带有文本信息的 1.3 GB csv 文件读入 Python 的 pandas 对象?

将文件中的双值数字读入 C++ 中的向量并访问它们的值