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?
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).
En supposant que votre import myDict
fonctionne, vous devez procéder comme suit:
from myDict import airportCode
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.
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.
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.
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.
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 .