Вопрос или проблема
У меня есть файл, в котором словарь создается на основе чтения содержимого файла 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
. Давайте внимательно разберем, в чем может быть причина того, что ручная запись словаря не отображается в импортированном варианте.
-
Проверьте названия файлов: Убедитесь, что вы импортируете правильный файл. У вас указано
from scrap import final_dict
, но в вашем исходном коде словарь создается вref.py
. Пожалуйста, исправьте импорт следующим образом:# run_template.py from ref import final_dict print(final_dict)
-
Проверьте кодировку и доступность данных: Убедитесь, что файл Excel, из которого вы считываете данные, корректно загружается. Проверьте, что в нем есть данные, которые вы хотите добавить в словарь. Вы также можете добавить диагностику (например,
print(df)
), чтобы убедиться, что данные считываются правильно. -
Проблема с кэшированием: Если вы уже запустили
run_template.py
и в нем был зафиксирован словарь до измененияref.py
, то Python может использовать кэшированную версию импорта. Чтобы этого избежать, попробуйте следующее:- Перезапустите интерпретатор Python или ваш редактор.
- Убедитесь, что вы всегда выполняете
run_template.py
после внесения изменений вref.py
.
-
Явное обновление словаря: Если вы хотите, чтобы каждая модификация вашего словаря в
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)
Такой подход гарантирует, что вы всегда получаете актуальную версию словаря, включая ваши ручные записи.
Следуя этим шагам, вы должны быть в состоянии исправить проблему с отсутствующей записью в словаре при импорте. Если после всех вышеуказанных действий проблема остается, обратите внимание на детали реализации и выводимые сообщения об ошибках для дальнейшей диагностики.