分享
三行代码  ›  专栏  ›  技术社区  ›  Christian

在Python2.x中处理多个文件

  •  0
  • Christian  · 技术社区  · 2 年前

    我是python新手,我正在编写一个长而复杂的程序。 为了更好的管理,我想将代码分开,并调用main app.py中的变量和函数,我将经常运行它。

    考虑到以下两个文件,如何将函数和变量正确导入app.py?

    PY1.PY:

       import pytz
        import json
        import pandas as pd
        import numpy as np
    
        actual_date = run (...)
    
        def sqlquery():
            query = """  ..."""
            df = run_query(query)
            return df
    
        def calcuations():
            df = sqlquery()
            cat_age = df[.....]
            mouse_name = df[.....]
            ....
    
            if cat>=10:
                color = "good"
                else:
                color = "bad"
    
        return calcuations()
    

    PY2.PY:

    import pytz
    import json
    import pandas as pd
    import numpy as np
    
    actual_date = run (...)
    
    def sqlquery2():
        query = """  ..."""
        df = run_query(query)
        return df
    
    def calcuations2():
        df = sqlquery()
        cow_age = df[.....]
        horse_name = df[.....]
        ....
    
        if cow_age>=10:
            color = "good"
            else:
            color = "bad"
    
    return calcuations2()
    

    在app.py中,我想调用所有变量并创建一个json: 我尝试过 from part1 import * 但我有个错误: NameError: name 'part1' is not defined 这是app.py

    import pytz
    import json
    import pandas as pd
    import numpy as np
    from part1 import *
    from part2 import *
    
    def json():
    
        data_out = {}
        data['animal_age'] = {}
        data['animal_age']['cat'] = cat_age
                    .....
    
        data_out = json.dumps(data_out)
        return data_out
    

    将所有变量和函数导入app.py的正确方法是什么?

    1 回复  |  直到 2 年前
        1
  •  0
  •   Ofer Sadan    2 年前

    您根本没有导入名称part1(只是其中的所有内容),但您可能仍在代码中的某个地方使用它,这就是为什么您会得到错误。

    看着你的 part1.py part2.py 文件,它们非常相似,有相同的变量名…所以从 part2 只是覆盖了你刚从 part1

    正确的方法是更换

    from part1 import *
    from part2 import *
    

    import part1
    import part2
    

    并相应地使用它们的变量,比如 part1.actual_date part2.actual_date

    这将解决您遇到的错误和用多个相似对象填充名称空间(有时甚至重叠)的错误做法。

    此外,注释者对代码的评论是正确的,这里还有一些其他的错误不允许您运行任何东西,例如一些缩进问题和 return 函数外的语句