Я знаю, что могу включать кодекс Пайтона от использования общего файла import MyModuleName
- но как я иду об импортировании просто dict?
Проблема, которую я пытаюсь решить, у меня есть 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?
Просто импортируйте его
import script
print script.airportCode
или, лучше
from script import airportCode
print airportCode
просто будьте осторожны, чтобы поставить оба скрипты в том же каталоге (или сделать пакет Python, подбадир __ in init __. Py
Файл; или поставьте путь к Script.py на PythonPath; но это «Дополнительные параметры», просто поставьте его в тот же каталог, и все будет хорошо).
При выполнении импорта в Python вы действительно просто потяните имена в текущее пространство имен. На самом деле это не имеет значения, к чему имена относятся так:
from myDict import airportCode
будет работать независимо от того, работает ли AirportCode
, является функцией, классом или просто поле, как в вашем случае.
Если ваш 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"
осторожно: если аэропорт был в этом списке дважды, последнее возникновение наступило бы тихо «перезаписать» любой предыдущий (ы).
Используйте CSV. Stick Импорт 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 TLAS в двух столбцах с аэропортом и Iatacode как заголовки.
Вы также можете пропустить диктографические и просто иметь строки, используя читатель и писатель, а не Dictreader и Dictwriter.
По умолчанию модуль CSV производит CSV в стиле Excel, но вы можете установить любой диалог, который вам нравится как kwarg.
Ну, это не нужно быть .py
файл. Вы могли бы просто сделать:
eval(open("myDict").read())
Это зияющееся дыру безопасности.
Другой модуль, который вы можете посмотреть, является CSV
для импорта файлов CSV. Тогда ваши пользователи могут редактировать его с помощью электронной таблицы, и вам не нужно учитывать их синтаксис Python.
from myDict import airportCode
airportNode = 'BRISTOL'
myAirportCode = airportCode[airportName]
Если MyDict должен получить доступ к модулю Python в другом каталоге, вам необходимо предоставить __ __ __. PY
модуль.
Для получения дополнительной информации об этой теме взгляните на главу модуля Документацию Python .
Ну, это не должно быть файлом .py
. Вы могли бы просто сделать:
eval(open("myDict").read())
Это зияющееся дыру безопасности.
Другой модуль, на котором вы можете посмотреть на CSV
для импорта файлов CSV. Тогда ваши пользователи могут редактировать его с помощью электронной таблицы, и вам не нужно учитывать их синтаксис Python.
Предполагая, что ваш MyDict Mydict
работает, вам нужно сделать следующее:
from myDict import airportCode