python - 编写文件,读取它们并使用不同的模块调用它们
问题描述
在将程序运行到文本文件并在不同的模块中读取它们后,我试图保存变量,以便在原始程序中调用它们。重点是编写具有主程序的 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
解决方案
如果你想保存一个数组,你不能只将它保存为文本并期望 python 来解决它。当您阅读它时,您将其作为文本(作为字符串)阅读,这就是您的程序所能知道的全部。
如果您想保存复杂的对象,您还有其他几个选项:
- 您可以保存文本(如您所做的那样),但在读取文本时手动解析它以将其转换为数组。编写没有错误是很复杂的,如果你有比数组更复杂的东西,它会变得更加复杂。
- 您可以使用pickle保存它- 虽然这对于几乎所有对象都是一个很好的解决方案,但创建的文件对人类来说是不可读的,这可能不是您想要的。
- 一个很好的中间立场是将对象保存为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)
推荐阅读
- javascript - 使用 Node.js 清除控制台输出
- android - 将项目插入recyclerview时如何制作动画?
- javascript - 使用Nodejs在textarea中显示大文本文件的内容
- java - 如何在 Java Spring boot 中生成从 1 开始的有序 Id 值?(例如:1、2、3、4、5、6...)
- ios - XCode 中的 tableView 正在返回包含来自数组的随机数据的单元格
- polyglot - Polyglot ImportError:无法从“icu”导入名称“Locale”
- arrays - MongoDB - 如何将数组中的 2 个字符串值转换为整数后求和?
- r - mutate 函数显示在数据查看器中创建的新列,但不在环境中的数据框中
- firebase - flutter firebase phone auth error a security net token was pass but no matching sha-256 was registered in the firebase console
- node.js - 如何在不获取另一个随机数的情况下从函数中获取随机数?