我是python和编程的新手。我试过搜索这个,但一直找不到答案。
我正在寻找将数据文件附加到数组的最佳方法,并在多个python模块中使用它。作为一个学期的理科学生,我知道在我的教育期间我会多次使用这个,所以我想要一些帮助,找到一个更好的方法来做到这一点。
以下是我第一学期团体项目的一个例子。我们被要求使用python模拟演讲者,以帮助完成不同的任务。我们被给予阻塞读取以在数据文件中使用。数据文件有3个collumns。频率,实阻抗,虚阻抗。
在第一个文件中,我们称之为import_define.py。我们有以下代码,从名为data的数据文件中导入。
infile = open('data.dat', 'r')
infile.readline()
freq_list = []
real_list = []
imag_list = []
for line in infile:
split = line.split()
freq_list.append(float(split[0][:-1]))
real_list.append(float(split[1][:-1]))
imag_list.append(float(split[2]))
infile.close()
import numpy as np
freqenzy = np.asarray(freq_list)
real_imp = np.asarray(real_list)
imag_imp = np.asarray(imag_list)
然后我们在这个模块中使用了三个数组进行不同的计算。
现在我们要在不同的模块plot.py中使用这些数组,我们要在这些模块中绘制来自这3个数组的一些数据,以及在import_define.py中计算的不同数据
我们所做的是在import_define.py中定义3个返回数组的函数,如下所示:
def freq_func():
return frequenzy
def real_imp_func():
return real_imp
def imag_imp_func():
return imag_imp
在plot.py文件中,我们执行了以下操作来导入和使用此新模块中的数组:
import import_define as imd
freq = imd.freq_func()
real = imd.real_imp_func()
imag = imd.imag_imp_func()
所以我想问一下,当使用python时,是否有更好或更正确的方法。
答案 0 :(得分:1)
数组变量是import_define模块中的全局变量,因此您可以直接使用它们:
import import_define as imd
print imd.frequenzy
我认为您可以使用numpy.loadtxt
快速加载文件中的数组,而不是for循环。
答案 1 :(得分:0)
无需拥有这些功能。在plot.py中,您可以使用以下命令访问这些变量:
import import_define as id
id.freqenzy
答案 2 :(得分:0)
您可以实现单例模式。
class ModuleSharedFile:
class __SharedFile:
def __init__(self, file_path):
self.file_path = file_path
self.array = self.__loadArray()
def __str__(self):
return repr(self) + self.val
def __loadArray(self):
# Do your stuff here.
pass
instance = None
def __init__(self, file_path):
if not ModuleSharedFile.instance:
ModuleSharedFile.instance = ModuleSharedFile.__SharedFile(file_path)
else:
ModuleSharedFile.instance.file_path = file_path
def __getattr__(self, name):
return getattr(self.instance, name)
然后,无论您在哪里创建ModuleSharedFile的实例,您都将使用相同的文件/数组。
答案 3 :(得分:0)
最简单的解决方案描述于:“如何跨模块共享全局变量?”:http://effbot.org/pyfaq/how-do-i-share-global-variables-across-modules.htm
因为每个模块只有一个实例,所以对模块对象所做的任何更改都会反映在任何地方。
因此python模块的实例是单例。
您创建空文件dummy.py
,它将被初始化为模块。
# module1.py
import dummy
dummy.x = "value" # set shared value
# module2.py
import dummy
print dummy.x # read shared value