如何将变量从文件“a”读入主文件“c”,在导入的文件“b”中?

时间:2016-06-23 10:01:31

标签: python import

我有一个文件,说“c.py”和导入的文件“b.py”,它在代码后面的“c.py”中使用

import b.py
def scatter_plot(file0,camp):

    # enter complete path of file
    file1 = ("/home/data/camp0" + str(camp) + "/not_detrended/ktwo"+ str(file0)+ "c0"+ str(camp)+ "_lpd_LC.txt")
    file2 = file1.replace("not_","")
    file3 = open('/home/parameters1.txt','r')

    y = np.genfromtxt(file1)
    x = np.genfromtxt(file2)
    text = file3.read()
    specs = text.split()

    #Input the parameters
    i = specs.index(str(file0))
    t0 = float(specs[i + 2])
    period = float(specs[i + 1])
    .......

在主文件c.py中,我读取文本文件“file3”并获取上面的变量(t0和句点)。我已经导入了一个文件“b.py”,它也使用了这些变量,但为了使代码工作,我必须在运行c.py之前在文件b.py中定义和修复这些变量,我不能使用它们来自“ file3。我想通过调用函数scatter_plot()来运行主文件“c.py”,并希望变量也在导入的文件“b.py”中定义。只需当我调用我想要的函数时在导入的文件中也使用这些变量。这可能吗?

par = [tduration, depth, t0, period]    
firstmodel = traptransitover.traptransitover( time, par)
newmodel  = traptransitover.traptransitover( time, result)

上面的代码是几行“b.py”。如果我没有在“b.py”中定义变量t0和句点并在运行“c.py”之前修复它们就不行了。但是,如果我这样做,那么就不会使用“file3”中的读取变量。在运行代码之前,我无法每次定义。  对不起如果我无法解释我的问题,你需要更清晰,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解你的话

  1. 您需要在3个模块之间共享一些变量。
  2. 要初始化此变量,您需要阅读文件
  3. 在程序启动时未定义文件(即您需要解析争论或读取用户输入)
  4. 最好的方法是重写模块a.py,b.py和c.py,这样thay就可以在不知道这些变量的情况下导入。所有使用变量的代码都必须包含在接受(t0和period)作为参数的函数或类中,并且在" c.py"之前不应调用它们。不解析文件。

    另一种方法是创建另一个模块(例如" config.py")来存储变量,并将这些模块包含在所有其他模块中。在初始化配置文件时,您将无法导入其他模块。

    config.py

    t0 = None
    period = None
    def initialize_t_and_period( file ):
         global t0
         global period
    
         #here code for initialization t0 and period  from scatter_plot
    

    模块b.py

    import config
    do_something_with( config.t0 )
    ...
    

    模块c.py

    import config
    
    def scatter_plot( file0, camp ):
        config.initialize_t_and_period( file0 )
    
        #after initialization you can safety import modules       
        import a
        import b
    

    如果file始终相同(即预定义),则可以在config.py中读取它。尽管在程序运行期间配置导入两次,但它只执行一次。