Недостающая запись словаря в ручном режиме при импорте в другой файл

Вопрос или проблема

У меня есть файл, в котором словарь создается на основе чтения содержимого файла Excel. В словаре отсутствует ручная запись, когда к нему обращаются из второго файла…
(упрощенный код)

В ref.py ручная запись — это “x”:”xyz”.

# ref.py
import pandas as pd

df = pd.read_excel('dictfile.xlsx', sheet_name="ref")

def make_dict():
   temp_dict = {"x":"xyz"}
   for i,r in df.iterrows():
      temp_dict[r['key']] = r['value']
   return temp_dict

final_dict = make_dict()

Печатаем словарь:

{'x': 'xyz', 'a': 'aaa', 'b': 'bbb', 'c': 'ccc'}

В другом файле я импортирую этот файл, чтобы иметь возможность ссылаться на словарь. Словарь доступен, ЗА ИСКЛЮЧЕНИЕМ записи xyz.

# run_template.py
from scrap import final_dict

final_dict

Печатаем словарь:

{'a': 'aaa', 'b': 'bbb', 'c': 'ccc'}

Ответ или решение

Проблема, с которой вы столкнулись, связана с тем, как вы импортируете и используете final_dict из вашего файла ref.py в другом файле run_template.py. Давайте внимательно разберем, в чем может быть причина того, что ручная запись словаря не отображается в импортированном варианте.

  1. Проверьте названия файлов: Убедитесь, что вы импортируете правильный файл. У вас указано from scrap import final_dict, но в вашем исходном коде словарь создается в ref.py. Пожалуйста, исправьте импорт следующим образом:

    # run_template.py
    from ref import final_dict
    
    print(final_dict)
  2. Проверьте кодировку и доступность данных: Убедитесь, что файл Excel, из которого вы считываете данные, корректно загружается. Проверьте, что в нем есть данные, которые вы хотите добавить в словарь. Вы также можете добавить диагностику (например, print(df)), чтобы убедиться, что данные считываются правильно.

  3. Проблема с кэшированием: Если вы уже запустили run_template.py и в нем был зафиксирован словарь до изменения ref.py, то Python может использовать кэшированную версию импорта. Чтобы этого избежать, попробуйте следующее:

    • Перезапустите интерпретатор Python или ваш редактор.
    • Убедитесь, что вы всегда выполняете run_template.py после внесения изменений в ref.py.
  4. Явное обновление словаря: Если вы хотите, чтобы каждая модификация вашего словаря в ref.py всегда была доступна, можно изменить структуру программы таким образом, чтобы словарь пересоздавался каждый раз при импорте. Например, вы можете добавить функцию-обертку, которая возвращает актуальную версию словаря:

    # ref.py
    import pandas as pd
    
    df = pd.read_excel('dictfile.xlsx', sheet_name="ref")
    
    def make_dict():
       temp_dict = {"x": "xyz"}
       for i, r in df.iterrows():
           temp_dict[r['key']] = r['value']
       return temp_dict
    
    def get_final_dict():
       return make_dict()

    Затем в run_template.py вы можете делать следующее:

    # run_template.py
    from ref import get_final_dict
    
    final_dict = get_final_dict()
    print(final_dict)

Такой подход гарантирует, что вы всегда получаете актуальную версию словаря, включая ваши ручные записи.

Следуя этим шагам, вы должны быть в состоянии исправить проблему с отсутствующей записью в словаре при импорте. Если после всех вышеуказанных действий проблема остается, обратите внимание на детали реализации и выводимые сообщения об ошибках для дальнейшей диагностики.

Оцените материал
Добавить комментарий

Капча загружается...