2011-09-09 24 views
0

を格納していない、それはオリジナルの辞書をpickle化という点で、作品Pythonのピクルスは、私は辞書含むを持っているデータ

emailDict = {'Kilizo': 'info%40kilizo.com' , 'about': 'about%40google.com' } 


# write python dict to a file 

output = open('orig.pkl', 'wb') 
pickle.dump(emailDict, output) 
output.close() 

私のメインのウェブサイトに次に

をorig.pklし、私が持っている:

# Pickling # Deleting Old Temp & Creating New One 
tmp = os.path.isfile("tmp.pkl") 
if tmp == True: 
     os.remove("tmp.pkl") 
shutil.copyfile("orig.pkl", "tmp.pkl") 

# Pickling # Loading File 
pkl_file = open('tmp.pkl', 'rb') 
emailDict = pickle.load(pkl_file) 
pkl_file.close() 

私は、2つのフォームINPを持っています新しいデータがtmp.pklのいずれかに保存されていないか、

任意のアイデアがorig.pklますが、メールアドレスと対応する名前

#Processing input 
emailAdded = fs.getvalue('emailAdd') 
nameAdded = fs.getvalue('nameAdd') 
if emailAdded != None or nameAdded != None: 
    print emailAdded 
    print nameAdded 
    emailDict[nameAdded] = emailAdded 
else: 
    print "Please enter a name & email address" 
output = open('tmp.pkl', 'wb') 
pickle.dump(emailDict, output) 
output.close() 
print emailDict 

を取るウェブサイト上のUTSは私が始めるには?

おかげ

+0

私のために働きます。しかし、私は2行を追加しました:newDict = pickle.load(pkl_file)print newDict – Louis

答えて

2

私が始めるための任意のアイデア?

ウェブサイトの動的更新データストアとしてpickleを使用することはあまり役に立ちません。並行処理の問題を避けるためには、ロックファイルのメカニズムを実装し、ファイルにアクセスする他のすべてがそれを尊重することを願ってください。

同時アクセスをサポートするデータストアを使用することを強くお勧めします。例えば。データベース。あなたはsqliteので簡単に始めることができhttp://en.wikipedia.org/wiki/Concurrency_control


はの読み取りを持っています。参照してください: http://docs.python.org/library/sqlite3.html

+0

'sqlite3'はデフォルトでマルチスレッドサポートを持っていません。 – jfs

+0

私はファイナルが欠けていました:shutil.copyfile( "tmp.pkl"、 "orig.pkl") あなたの同時アクセスについての権利はありますが、これを実装することを検討する必要があります。 – Kilizo

+0

好奇心で、何らかの既存のデータベースシステムを使用してみませんか? mongoやsqliteのような妥当なデーターダースシステムでは、すでにすべてのものが用意されています。ファイルのロックや移動などの面倒な部分を処理する必要はありません。 – krs1

0

MattHが正しいです、あなたは間違いなくデータベース交換としてピクルを使用すべきではありません。私はmongoのようなものを使用することをお勧めします。私はpymongoが本当に使いやすく、辞書をスラップアップすることが分かった。

0

python shelveモジュールは、辞書のようなオブジェクトを提供するだけでなく、求めたときにオブジェクトをファイルに保存して保存します。他の人が言っているように、頻繁に更新される場合は、何らかのデータベースを使用したいが、使いやすさのためにshelveモジュールを叩くのは難しい。

http://docs.python.org/library/shelve.html

関連する問題