Как импортировать или включать структуры данных (например, 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?
Ответы
Ответ 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.