【问题标题】:Read in lines from text line as separate arrays从文本行中读取行作为单独的数组
【发布时间】:2019-02-09 18:37:06
【问题描述】:

我有一个文本文件,其中包含类似于数组格式的字符串行。我最初有一个 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]), ...]

【问题讨论】:

  • 如果要从源头解决问题,请使用 .npy 文件(numpy.load、numpy.save),或者 numpy.loadtxt、numpy.savetxt...
  • 我也尝试了np.loadtxt,但收到如下错误:ValueError: could not convert string to float: '[392.668,'。我知道这是因为我将整个数组(及其格式)保存为字符串,而不仅仅是数字。但不幸的是,我无法返回并以其他格式保存它。
  • 您可以使用 np.genfromtxt 并提供 converters argument: converters={0: (lambda x:float(x.lstrip('['))), 4: (lambda x:float(x.rstrip(']')))} (我不知道最后一列 (4) 是否带有换行符,如果是的话,您需要把它也去掉。)
  • 写一个数组的str(arr) 不是一个好主意。它包括使读取复杂化的[](以及用于长数组的...)。但是这样做之后,您现在必须在解析之前去掉那些额外的 []。

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


【解决方案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))

【讨论】:

    【解决方案2】:

    你在寻找这样的东西吗?

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

    如果我知道文本文件的外观如果能显示您尝试从中读取的文本文件的格式会更容易

    【讨论】:

    • 请查看我的编辑以获取我的文件格式的示例以及我希望从中得到什么。问题在于每行之后的新行,以及它们是字符串的事实(包括[] 字符)。我刚刚尝试了您的建议,但它不适用于格式。
    • 阅读 python 字符串方法。括号可以用 str.replace 删除,行结尾用 str.strip
    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 2021-07-30
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多