web-dev-qa-db-ja.com

データ構造(辞書など)を別のファイルからPythonファイルにインポートまたは含める方法

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にアクセスするにはどうすればよいですか?

27
Pranab

インポートするだけ

import script
print script.airportCode

または、より良い

from script import airportCode
print airportCode

両方のスクリプトを同じディレクトリに置くように注意してください(またはpythonパッケージ、__init__.pyファイル。または、PYTHONPATHにscript.pyへのパスを入れます。しかし、これらは「高度なオプション」であり、同じディレクトリに置くだけで問題ありません)。

38
Khelben

import myDictは機能します。次のことを行う必要があります。

from myDict import airportCode
10
SilentGhost

pythonでインポートを実行すると、実際に名前を現在のネームスペースに引き込んでいるだけです。これらの名前が何を指しているかは問題ではありません。

from myDict import airportCode

airportCodeが関数、クラス、または単にフィールドであるかどうかに関係なく機能します。

2
Tendayi Mawushe

まあ、それは.pyファイルである必要はありません。あなたはちょうどすることができます:

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

しかし、これは大きなセキュリティホールです。

もう1つのモジュールは、CSVファイルをインポートするためのcsvです。そうすれば、ユーザーはスプレッドシートで編集でき、Python=構文を教える必要はありません。

1
Mike DeSimone

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として任意の方言を設定できます。

1
user106514

プログラマー以外の人が辞書を手動で編集できるようにする必要がある場合は、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回あった場合、最後に出現したものは、以前の空港を静かに「上書き」します。

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

MyDictが別のディレクトリにあるPythonモジュールからアクセスされる場合、__init__.pyモジュール。

このトピックの詳細については、 the Python documentation のモジュールの章をご覧ください。

0
pi.