Python 将文本行中的行作为单独的数组读入

Python 将文本行中的行作为单独的数组读入,python,arrays,python-3.x,numpy,readlines,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') 现在我想把它们读回,作为一个单独数

我有一个文本文件,其中包含类似于数组格式的字符串行。我最初有一个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]用于参数中的参数]
,我得到了以下错误:
索引器:数组的索引太多了

我还试着用
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]), ...]

你在找这样的东西吗

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

如果我知道文本文件是什么样子,如果我能显示您试图从中读取的文本文件的格式,那就容易多了。我找到了一种稍微简单一点的方法来实现这一点,而不必担心所有的字符串解析,使用正则表达式:

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))

如果您想在源代码处解决问题,请使用.npy文件(numpy.load,numpy.save)或numpy.loadtxt,numpy.savetxt…我也尝试了
np.loadtxt
,但得到了如下错误:
ValueError:无法将字符串转换为float:“[392.668]”
。我理解这是因为我有完整的数组(及其格式)保存为字符串,不仅仅是数字。但不幸的是,我无法返回并以其他格式保存它。您可以使用
np.genfromtxt
并提供一个:
converters={0:(lambda x:float(x.lstrip('[')),4:(lambda x:float(x.rstrip(']'))}/code>(我不知道最后一列(4)如果是这样的话,还需要换行。)编写数组的
str(arr)
不是一个好主意。它包括
[]
(对于长数组,
..
),这会使读取复杂化。但是这样做之后,您现在必须去掉那些额外的[]解析前。请参阅我的编辑,了解我的文件格式示例以及我希望从中获得的内容。问题在于每行后面的新行,以及它们是字符串(包括
[
]
字符).我刚才试过你的建议,但它不适用于格式。请阅读python字符串方法。括号可以用str.replace删除,行尾可以用str.strip删除