私はPythonオブジェクトの文字列表現をしたいと思います。私は有名なピクルスでそれをやっていましたが、それがより良いものとより安価なものが存在するかどうかは疑問です。私はreprとevalを使うのが好きではありません。彼らは安全ではありません。Pythonのオブジェクト表現
答えて
YAMLは、データ構造をシリアライズするためのかなり適切な形式です。 JSONと似ていますが、もっとそうです。 PyYAMLライブラリはかなりうまく動作します。データ構造をシリアライズする方法を推測できるだけでなく、かなり具体的になることができます。例については、完全なドキュメントを参照してください。
YAMLまたはJSONは素晴らしい選択。 –
JSONについての素晴らしい点は、標準ライブラリにあることに加えて、YAMLのサブセットであることです。したがって、JSONを使いYAMLに後で移動すると、YAMLパーサは引き続きデータを読み取ることができます。しかし、YAMLは一般的に見栄えが良く、JSONには欠けている機能がいくつかあります。 'import yaml'が失敗した場合、私は通常、オブジェクトダンプをJSONにフォールバックさせます。 – kwatford
オブジェクト表現では、シリアル化を意味する場合、pickleはオプションです。より高速な実装が必要な場合は、cPickle
repr()
を使用して文字列表現を取得し、ast.literal_eval()
を使用してオブジェクトを回復してください。
または単にピクルスを使用してください。 Python 2.xを使用している場合は、import cPickle
を使用するとより高速なpickleを得ることができますが、Python 3.xでは1つのpickleがあり、それがCです。
個人的には、単純なオブジェクトにJSONを使用したいと思っています。 import json
を試してみて、効果があるかどうかを確認してください。
ast.literal_eval()とeval()は正確な科学ではありません。複雑なオブジェクトで失敗するのに使用されます。 – Academia
'ast.literal_eval()'はいくつかの限られた場合を除いて 'repr()'からオブジェクトを再構築しません。実際、 '__repr__'がオーバーロードされていない一般的なケースでは、' repr() 'からオブジェクト**を再構築することはできません。これは単に'
たとえどのような引数を使って構築されたかを常に推測できる不変クラスを持っていても、 '__repr__'を多重定義してコンストラクタ呼び出しのような文字列を生成すると、' ast.literal_eval() 'はまだ処理されませんそれは式なので、リテラルではないからです。 'eval'に移動する必要があります。これは安全ではありません。 –
- 1. Pythonでのオブジェクトの数値表現
- 2. テキスト表現からのPythonオブジェクトの再構築
- 3. python正規表現
- 4. HTMLオブジェクトのJava表現
- 5. Pythonの正規表現
- 6. Pythonの正規表現
- 7. ファイルのPython正規表現
- 8. Pythonの正規表現 -
- 9. 正規表現のPython difflib
- 10. アサーション正規表現のPython
- 11. Pythonでの正規表現[^。]
- 12. は、正規表現のpython
- 13. 正規表現スラッシュキャプチャPython
- 14. Python正規表現ネガティブルックアヘッド
- 15. Pythonと正規表現
- 16. Python Unicode正規表現
- 17. Pythonタイムスタンプ正規表現
- 18. 表現がユニコードであるようなPythonオブジェクトのリストの使用方法
- 19. オブジェクトのベクトルのテンプレート文字列表現
- 20. オブジェクトのフルストリング表現への直接アクセス
- 21. Pythonでの正規表現の使用
- 22. Pythonの正規表現の境界
- 23. Pythonの正規表現のグループ
- 24. Pythonの正規表現の日付ギ
- 25. 複数行のPythonの正規表現
- 26. Pythonでの正規表現の実装
- 27. Pythonの正規表現の障害
- 28. Pythonでの正規表現の使用
- 29. retweetsのためのpython正規表現
- 30. Pythonの正規表現のfindAllとマルチ
Pickleも安全ではありません。[pickle文書](http://docs.python.org/library/pickle.html)の上部にある警告をご覧ください。 – agf