web-dev-qa-db-fra.com

Comment importer ou inclure des structures de données (par exemple un dict) dans un fichier Python à partir d'un fichier séparé

Je sais que je peux inclure Python à partir d'un fichier commun en utilisant import MyModuleName - mais comment importer simplement un dict?

Le problème que j'essaie de résoudre est que j'ai un dict qui doit être dans un fichier dans un emplacement modifiable, tandis que le script réel est dans un autre fichier. Le dict peut également être édité à la main, par un non-programmeur.

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'}

Comment accéder à la dictée airportCode depuis l'intérieur script.py?

27
Pranab

Importez-le simplement

import script
print script.airportCode

ou mieux

from script import airportCode
print airportCode

Veillez simplement à placer les deux scripts dans le même répertoire (ou créez un package python, un sous-répertoire avec __init__.py fichier; ou mettez le chemin vers script.py sur le PYTHONPATH; mais ce sont des "options avancées", il suffit de le mettre dans le même répertoire et ça ira).

38
Khelben

En supposant que votre import myDict fonctionne, vous devez procéder comme suit:

from myDict import airportCode
10
SilentGhost

Lorsque vous effectuez une importation dans python vous ne faites que tirer des noms dans votre espace de noms actuel. Peu importe à quoi ces noms se réfèrent donc:

from myDict import airportCode

Fonctionnera que airportCode soit une fonction, une classe ou juste un champ comme dans votre cas.

2
Tendayi Mawushe

Eh bien, il n'est pas nécessaire que ce soit un .py fichier. Vous pourriez simplement faire:

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

C'est un trou de sécurité béant, cependant.

Un autre module que vous voudrez peut-être regarder est csv pour importer des fichiers CSV. Ensuite, vos utilisateurs pourraient le modifier avec une feuille de calcul et vous n'avez pas à leur enseigner la syntaxe Python.

1
Mike DeSimone

Utilisez csv. Stick import csv avec le reste de vos importations de module, puis vous pouvez procéder comme suit:

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

qui devrait vous donner une liste de dictionnaires:

airport | iatacode
__________________
Aberdeen| ABZ

pour créer le fichier csv:

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

qui créera un fichier csv avec les aéroports et les ILA TLA dans deux colonnes avec aéroport et iatacode comme en-têtes.

Vous pouvez également ignorer les dictés et simplement avoir des chaînes en utilisant Reader et Writer plutôt que DictReader et DictWriter.

Par défaut, le module csv produit un csv de style Excel, mais vous pouvez définir le dialecte que vous aimez comme kwarg.

1
user106514

Si votre dict doit être modifiable à la main par un non-programmeur, il peut être plus judicieux d'utiliser un fichier CSV pour cela. Ensuite, votre éditeur peut même utiliser Excel.

Vous pouvez donc utiliser:

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

lire un fichier CSV comme

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

Attention: si un aéroport figurait deux fois dans cette liste, la dernière occurrence "écraserait" silencieusement les précédents.

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

Si myDict doit être accessible à partir d'un module Python dans un répertoire différent, vous devez fournir un __init__.py module.

Pour plus d'informations sur ce sujet, consultez le chapitre module de la documentation Python .

0
pi.