Python 将文本行中的行作为单独的数组读入
我有一个文本文件,其中包含类似于数组格式的字符串行。我最初有一个numpy数组列表,并像这样将它们读入文件,其中每个数组大约有5个浮点: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') 现在我想把它们读回,作为一个单独数
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删除