Как импортировать или включать структуры данных (например, dict) в файл Python из отдельного файла

Я знаю, что я могу включить код Python из общего файла с помощью import MyModuleName – но как мне начать импортировать только dict?

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

script.py

 airportName = 'BRISTOL' myAirportCode = airportCode[airportName] 

myDict.py

 airportCode = {'ABERDEEN': 'ABZ', 'BELFAST INTERNATIONAL': 'BFS', 'BIRMINGHAM INTERNATIONAL': 'BHX', 'BIRMINGHAM INTL': 'BHX', 'BOURNMOUTH': 'BOH', 'BRISTOL': 'BRS'} 

Как получить доступ к airportCode dict из script.py ?

  • Разница дат в минутах в Python
  • Scrapy: restrict_css с плохим отформатированным HTML
  • Python, Flask: как настроить заголовок ответа для всех ответов
  • Браузер изображений Django Ckeditor не находит изображения
  • сохранить пароль как соленый хэш в mongodb в коллекции пользователей с помощью python - bcrypt
  • Простой запрос флакона / gevent не выполняется одновременно
  • Как преобразовать XML в JSON в Python?
  • Загрузка ошибки формата svmlight
  • 7 Solutions collect form web for “Как импортировать или включать структуры данных (например, dict) в файл Python из отдельного файла”

    Просто импортируйте его

     import script print script.airportCode 

    или лучше

     from script import airportCode print airportCode 

    Просто будьте осторожны, чтобы поместить оба сценария в один и тот же каталог (или сделать пакет python, субдир с файлом __init__.py или поместить путь в script.py на PYTHONPATH, но это «расширенные параметры», просто наденьте его тот же каталог, и все будет хорошо).

    Предполагая, что ваш import myDict работает, вам необходимо сделать следующее:

     from myDict import airportCode 

    Когда вы выполняете импорт в python, вы действительно просто втягиваете имена в свое текущее пространство имен. На самом деле не имеет значения, к каким именам относятся:

     from myDict import airportCode 

    Будет работать независимо от того, является ли airportCode функцией, классом или просто полем, как в вашем случае.

    Ну, это не должен быть .py файл. Вы можете просто сделать:

     eval(open("myDict").read()) 

    Однако это дыра в безопасности.

    Другой модуль, который вы, возможно, захотите посмотреть, – csv для импорта CSV-файлов. Тогда ваши пользователи могут редактировать его с помощью электронной таблицы, и вам не нужно учить их синтаксису Python.

    Если ваш dict должен быть доступен для редактирования не программистом, возможно, это может иметь смысл использовать CSV-файл для этого. Тогда вы можете даже использовать Excel.

    Таким образом, вы можете использовать:

     import csv csvfile = csv.reader(open("airports.csv")) airportCode = dict(csvfile) 

    прочитать CSV-файл, например

     "ABERDEEN","ABZ" "BELFAST INTERNATIONAL","BFS" "BIRMINGHAM INTERNATIONAL","BHX" "BIRMINGHAM INTL","BHX" "BOURNMOUTH","BOH" "BRISTOL","BRS" 

    Осторожно: если аэропорт был в этом списке дважды, последнее событие тихо «перезаписало» предыдущие (ы).

     from myDict import airportCode airportNode = 'BRISTOL' myAirportCode = airportCode[airportName] 

    Если myDict должен получить доступ из модуля Python в другом каталоге, вы должны предоставить модуль __init__.py .

    Дополнительные сведения об этой теме см. В главе модуля документации Python .

    Используйте csv. Вставьте import csv вместе с остальной частью вашего модуля, а затем вы можете сделать следующее:

     f = open('somefile.csv') reader = csv.DictReader(f, (airport, iatacode)) for row in reader: print row 

    который должен предоставить вам список словарей:

     airport | iatacode __________________ Aberdeen| ABZ 

    для создания файла csv:

     f = open('somefile.csv', 'w') writer = csv.DictWriter(f, (airport, iatacode)) for row in airportcode: writer.writerow() f.close() 

    который создаст файл csv с аэропортами и IATA TLA в двух столбцах с аэропортом и iatacode в качестве заголовков.

    Вы также можете пропустить dicts и просто иметь строки, используя Reader и Writer, а не DictReader и DictWriter.

    По умолчанию модуль csv создает csv в стиле excel, но вы можете установить любой диалект, который вам нравится, как kwarg.

    Interesting Posts

    Конвертировать JPG из AdobeRGB в sRGB с помощью PIL?

    Какая хорошая библиотека для вычисления вычислительной геометрии (например, CGAL) на сборке мусора?

    Улучшить pandas (PyTables?) Производительность записи таблицы HDF5

    как разбирать строку в словаре

    Пейджинговые списки питонов в срезах из 4 элементов

    Как подключить Javascript к Python для совместного использования данных в формате JSON в обоих направлениях?

    Уникальный идентификатор нулевой точки для значений в пандах

    Подшипник между двумя точками

    Что означает «оценивается только один раз» для сравнения в Python?

    Обработка дополнительных строк новой строки (возврат каретки) в файлах csv, обработанных Python?

    Как фильтровать элементы PyQt QCombobox на основе ввода текста?

    получение имени переменной в python во время выполнения?

    дифференцировать null = True, blank = True в django

    Как использовать поле FieldList WFForms для FormFields?

    Python: всплывающее окно PyQt

    Python - лучший язык программирования в мире.