Python辞書を読み書きする簡単な方法を実装しましたが、関数として機能しない理由を理解するのに苦労しています。
辞書を保存するには、次のコマンドを使用します。
def saveHash():
print "Saving hash file to ./savedHash"
f = open('savedHash','w')
f.write(str(my_hash))
f.close()
print "Save Successfull"
saveHash()
これは完全に正常に機能します。次に、スクリプト内に辞書をロードします。
def loadHash(name):
print "Loading hash file %s" % (name)
f = open(name,'r')
my_hash = eval(f.read())
f.close()
print "Hash loaded"
loadHash('savedHash')
問題は、実行しているスクリプト内では機能しないように見えますが、シェル内では機能することです。savedHash
ディレクトリ内に/home/dan/
あり、そのディレクトリ内でPythonシェルを開いた場合は、orを実行するか、loadHash('savedHash')
辞書/ハッシュにデータが入力されません。実行すると失敗し、次のエラーメッセージが返されます。loadHash('./savedHash')
loadHash('/home/dan/savedHash')
random.choice(my_hash.keys())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/projects/dan/software/Python-2.7.2/Lib/random.py", line 274, in choice
return seq[int(self.random() * len(seq))] # raises IndexError if seq is empty
IndexError: list index out of range
ただし、次のようなコマンドごとに実行すると、次のようになります。
>>> f = open(name,'r')
>>> my_hash = eval(f.read())
>>> f.close()
入力print random.choice(my_hash.keys())
して値を取得できます。スクリプト内では機能しないが、シェル内では機能する理由を誰かが知っていますか?ファイル名を取得するために引数パーサーを使用しています。