import MyModuleName
を使用して、共通ファイルからPythonコードを含めることができることは知っていますが、辞書だけをインポートするにはどうすればよいですか?
私が解決しようとしている問題は、実際のスクリプトが別のファイルにある間に、編集可能な場所のファイルにある必要がある辞書があることです。辞書は、プログラマーではない人が手で編集することもできます。
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'}
script.py内からairportCode
dictにアクセスするにはどうすればよいですか?
インポートするだけ
import script
print script.airportCode
または、より良い
from script import airportCode
print airportCode
両方のスクリプトを同じディレクトリに置くように注意してください(またはpythonパッケージ、__init__.py
ファイル。または、PYTHONPATHにscript.pyへのパスを入れます。しかし、これらは「高度なオプション」であり、同じディレクトリに置くだけで問題ありません)。
import myDict
は機能します。次のことを行う必要があります。
from myDict import airportCode
pythonでインポートを実行すると、実際に名前を現在のネームスペースに引き込んでいるだけです。これらの名前が何を指しているかは問題ではありません。
from myDict import airportCode
airportCode
が関数、クラス、または単にフィールドであるかどうかに関係なく機能します。
まあ、それは.py
ファイルである必要はありません。あなたはちょうどすることができます:
eval(open("myDict").read())
しかし、これは大きなセキュリティホールです。
もう1つのモジュールは、CSVファイルをインポートするためのcsv
です。そうすれば、ユーザーはスプレッドシートで編集でき、Python=構文を教える必要はありません。
Csvを使用します。スティック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()
これにより、空港とIATA TLAが2列になり、空港とiatacodeがヘッダーになったcsvファイルが作成されます。
また、DictReaderとDictWriterではなくReaderとWriterを使用して、辞書をスキップして文字列だけにすることもできます。
デフォルトでは、csvモジュールはExcelスタイルのcsvを生成しますが、kwargとして任意の方言を設定できます。
プログラマー以外の人が辞書を手動で編集できるようにする必要がある場合は、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"
注意:空港がそのリストに2回あった場合、最後に出現したものは、以前の空港を静かに「上書き」します。
from myDict import airportCode
airportNode = 'BRISTOL'
myAirportCode = airportCode[airportName]
MyDictが別のディレクトリにあるPythonモジュールからアクセスされる場合、__init__.py
モジュール。
このトピックの詳細については、 the Python documentation のモジュールの章をご覧ください。