从文本行中读取行作为单独的数组

时间:2018-09-04 17:16:21

标签: python arrays python-3.x numpy readlines

我有一个文本文件,其中包含类似于数组格式的字符串行。我最初有一个numpy数组的列表,然后像这样将它们读入文件,其中每个数组大约有5个浮点数:

import numpy as np
parameters = [np.array(...), np.array(...), ...]
with open('params.txt', 'w') as f:
   for param in parameters:
       f.write(str(param)+'\n')

现在,我想把它们读回,作为单独数组的列表。但是,我对此有疑问-以下是我要尝试做的事情:

parameters = []
with open('params.txt', 'r') as f:
    for line in f:
        parameters.append(np.array(line))

但是现在当我稍后尝试索引这些数组中的元素并使用列表理解时,例如:[params[2] for params in parameters],我得到了此错误:IndexError: too many indices for array

我也尝试过用line.split(',')读出它们,但这并没有给我我想要的,只是进一步弄乱了格式。我该怎么做?

我的文本文件的格式:

[242.1383, 131.087, 1590.853, 1306.09, 783.979]
[7917.102, 98.12, 21.43, 13.1383, 6541.33]
[823.74, 51.31, 9622.434, 974.11, 980.177]
...

我想要什么:

parameters = [np.array([242.1383, 131.087, 1590.853, 1306.09, 783.979]), np.array([7917.102, 98.12, 21.43, 13.1383, 6541.33]), np.array([823.74, 51.31, 9622.434, 974.11, 980.177]), ...]

2 个答案:

答案 0 :(得分:1)

我想出了一种稍微简单的方法来完成此任务,而不必担心使用正则表达式进行所有字符串解析:

import re
parameters = []
with open('params.txt', 'r') as f:
    for line in f:
        set = [float(value) for value in re.findall('\d+\.?\d*', line)]
        parameters.append(np.array(set))

答案 1 :(得分:0)

您是否正在寻找类似的东西?

parameters = []
for line in f.readlines():
    y = [value for value in line.split()]
    parameter.append( y )

如果我知道文本文件的外观会显示出您试图读取的文本文件的格式,那将会更容易