Подтвердить что ты не робот

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

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

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

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?

4b9b3361

Ответ 1

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

import script
print script.airportCode

или, лучше

from script import airportCode
print airportCode

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

Ответ 2

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

from myDict import airportCode

Ответ 3

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

from myDict import airportCode

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

Ответ 4

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

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

Это дырявое отверстие безопасности, однако.

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

Ответ 5

Если ваш 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"

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

Ответ 6

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

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

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

Ответ 7

Использовать csv. Stick 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.