首页 > 解决方案 > 编写文件,读取它们并使用不同的模块调用它们

问题描述

在将程序运行到文本文件并在不同的模块中读取它们后,我试图保存变量,以便在原始程序中调用它们。重点是编写具有主程序的 4 个不同结果的图。

尝试编码

#main program

a = array([[0.05562032, 0.05386903, 0.05216994, 0.03045489, 0.03029977,
        0.03014554],
       [0.        , 0.00175129, 0.00345037, 0.15353227, 0.1536874 ,
        0.15384163]])
#save paramaters in external file
save_paramaters = open('save.txt','w')
save_paramaters.write(str(a))
save_paramaters.close()

我在python模块中打开txt文件并将其保存为一个变量,我手动更正了(用逗号替换空格)

#new program

dat = "save.txt"
b = open(dat, "r")
c = array(b.read())

在主程序中,我现在用

a = array([[0.05562032, 0.05386903, 0.05216994, 0.03045489, 0.03029977,
        0.03014554],
       [0.        , 0.00175129, 0.00345037, 0.15353227, 0.1536874 ,
        0.15384163])
#save paramaters in external file
save_paramaters = open('save.txt','w')
save_paramaters.write(str(a))
save_paramaters.close()

#open the variable
from program import c
from matplotlib.pyplot import figure, plot
#and try to plot it
plot(c[1][:], label ='results2')
plot(c[0][:], label ='results1')





  File "/Example.py", line 606, in example
      plot(c[1][:], label ='results2')   #model

IndexError: too many indices for array

标签: pythonarrays

解决方案


如果你想保存一个数组,你不能只将它保存为文本并期望 python 来解决它。当您阅读它时,您将其作为文本(作为字符串)阅读,这就是您的程序所能知道的全部。

如果您想保存复杂的对象,您还有其他几个选项:

  1. 您可以保存文本(如您所做的那样),但在读取文本时手动解析它以将其转换为数组。编写没有错误是很复杂的,如果你有比数组更复杂的东西,它会变得更加复杂。
  2. 您可以使用pickle保存它- 虽然这对于几乎所有对象都是一个很好的解决方案,但创建的文件对人类来说是不可读的,这可能不是您想要的。
  3. 一个很好的中间立场是将对象保存为JSON - 这是大多数数据类型的标准,并且可以很好地用于 dicts、列表和元组(但会因更复杂的对象而失败),更重要的是,它对人类来说是可读的,例如你自己。

假设您使用 JSON。您保存这样的列表:

import json
with open('save.txt','w') as f:
    json.dump(your_object, f)

就如此容易。要回读列表:

import json
with open('save.txt','r') as f:
    your_new_object = json.load(f)

这很简单,不是吗?请注意,我使用了一个with语句来打开文件以确保它们也正确关闭,但这也更容易编写。使用 pickles 非常相似,甚至具有相同的语法,但对象保存为字节而不是文本(因此您必须分别对文件使用'rb''wb'模式来读取和写入)。

要对 numpy 数组做同样的事情,我们也可以使用numpy.save

np.save('save', your_numpy_array)

我们用numpy.load读回(带有npy扩展名):

your_array = np.load('save.npy')

在可读性方面,打开文件将是半可读的(少于 JSON,多于 pickle)


推荐阅读