Работа с несколькими файлами в Python 2.x - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в Python и пишу длинную и сложную программу.Для лучшего управления я хотел бы отделить код и вызвать переменную и функции в главном app.py, который я буду часто запускать.

Учитывая следующие два файла, как правильно импортировать функции и переменные вapp.py?

part1.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()

part2.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 Ответ

0 голосов
/ 05 июня 2018

Вы вообще не импортируете имя part1 (только все внутри него), но, вероятно, все еще используете его где-то в своем коде, поэтому вы получаете сообщение об ошибке.

Глядя на ваши part1.py и part2.py файлы, они очень похожи и имеют одинаковые имена переменных в любом случае ... так что, вероятно, ошибка импортировать все из part2, который просто перезаписывает часть того, что вытолько что импортированные из part1

Правильный способ - заменить

from part1 import *
from part2 import *

на

import part1
import part2

и соответственно использовать их переменные, например part1.actual_date или part2.actual_date

Это решит как ошибку, которую вы получаете, так и плохую практику заполнения вашего пространства имен несколькими похожими объектами (которые иногда даже перекрываются)

Также замечания комментаторов о вашем кодеправильно, есть несколько других ошибок, которые не позволяют вам что-либо запускать, например, некоторые проблемы с отступами и оператор return вне функции

...