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

Я знаю, что могу включать кодекс Пайтона от использования общего файла 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?

27
задан SilentGhost 25 January 2010 в 14:45
поделиться

7 ответов

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

import script
print script.airportCode

или, лучше

from script import airportCode
print airportCode

просто будьте осторожны, чтобы поставить оба скрипты в том же каталоге (или сделать пакет Python, подбадир __ in init __. Py Файл; или поставьте путь к Script.py на PythonPath; но это «Дополнительные параметры», просто поставьте его в тот же каталог, и все будет хорошо).

40
ответ дан 28 November 2019 в 04:59
поделиться

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

from myDict import airportCode

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

2
ответ дан 28 November 2019 в 04:59
поделиться

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

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

1
ответ дан 28 November 2019 в 04:59
поделиться

Используйте 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.

1
ответ дан 28 November 2019 в 04:59
поделиться

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

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

Это зияющееся дыру безопасности.

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

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

Если MyDict должен получить доступ к модулю Python в другом каталоге, вам необходимо предоставить __ __ __. PY модуль.

Для получения дополнительной информации об этой теме взгляните на главу модуля Документацию Python .

0
ответ дан 28 November 2019 в 04:59
поделиться

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

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

Это зияющееся дыру безопасности.

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

1
ответ дан 28 November 2019 в 04:59
поделиться

Предполагая, что ваш MyDict Mydict работает, вам нужно сделать следующее:

from myDict import airportCode
10
ответ дан 28 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: