2012-01-31 8 views
1

私は、辞書にいくつかのデータを構築するcronジョブで実行されているpythonスクリプトを1分に1回持っています。私はそのデータをシンプルなスペース区切りのテキストファイルに書き出し、Webページが要求されるたびにPHPに読み込みます。ファイルIOを使用してPHPにPython辞書を渡すのに最適

この情報を渡す正しい方法は何ですか? PHPで本質的に同じ構造を再構築しているので、私が今やっていることは確かに大変です。 PHPがPHP配列に直接読み込むことができるように、Python辞書(おそらく注文辞書が必要です)をディスクに書き込むにはどうしたらいいですか?

この転送方法が古くなっているかどうかについても心配します。代わりにデータベースを使用してください。 SQLlite?ファイルが更新されているときに誰かがページを読み込んで問題が発生するかもしれないと心配です。

私はただ軽くてシンプルなものが必要です。それを過度に複雑にしたくない。前もって感謝します。

+0

はここで他の誰かがそれをやった方法は次のとおりです。http://codesnippets.joyent.com/ posts/show/252 – gorus

+0

space-CSVファイルはJSONダンプと同じくらい良いです。しかし、それはあなたが持っているデータの種類に依存します。それはグローバルな設定ですか、あるいは実際にはスプールディレクトリがありますか?それは本当に何かの単一のリストですか、それともデータベースのリレーショナルモデルのメリットでしょうか? (例えば、他のデータベーステーブルを照会するために使用できますか?) – mario

答えて

2

すべての言語でJSONを読むことができます.JSONは単にテキストとしてデータを書式設定するためのもので、どのプログラムでも簡単に解析できます。 JSONファイルとして辞書を書き込むには、あなたがこれを行う:

import json 
myfile = open('data.json','w+') 

#create your dict 

json.dump(mydict,myfile) 
myfile.close() 

を今PHPでそれを読むために:

$data = json_decode(file_get_contents("data.json")); 
+0

大変ありがとうございます。データを渡すJSONメソッドを試してみます。しかし、1つの質問。注文はどうですか?注文したディクトを使用しないと、PHPで注文がランダムになることはありませんか?私はそれを望んでいないので、私は命令付きの辞書を使うか、PHPで並べ替える必要があると思いますか? – Dave31415

+0

特定の注文をしたいのであれば、標準のpython dictの順序は実装の詳細なので、実際にはPythonで順序付けられた実装を必要とします。 Python 2.7のコレクションモジュールには、[OrderedDict](http://docs.python.org/dev/library/collections.html#collections.OrderedDict) – bigblind

+0

があります。実際はうまくいきます。私は実際に辞書の配列を持っています。私が気にするのは、配列の順序が保持されている必要があるということだけです。 – Dave31415

1

PHPがjsonデータを処理するかどうかわかりませんが、もしそうなら、それはおそらく行く方法です。

、実際に

は、PHPでJSONデータを扱うん...多くのため jsonモジュール documentationを参照してください: http://php.net/manual/en/book.json.php

これは、データを転送するために、比較的単純だが強力な方法でなければなりません。

+1

PHPにはJSONを読み取る複数の方法があります。あなたのcronジョブを 'output.json.tmp'のようなファイルに書き出し、書き込みが終わったらファイルを' output.json'に移動してください。これにより、 'output.json'は常に完全なファイルになります。 – lunixbochs

+0

一時的なファイルを数ミリ秒で読み込もうとすると、PHPはエラーを投げるでしょうか?それとも、待ってからもう一度試してみるのですか? – Dave31415