質問

これは、私はプロジェクトのためにやったものです。私はbasciallyデータを操作するいくつかのメソッドを持つ辞書ですいくつかのデータ構造を持っています。私はディスクに保存するとき、私はモジュールとしてインポートする場合は、このようなデータ構造に同じデータをロードすることをコードとしてファイルをの.pyするためにそれらを書き出します。

これは合理的ですか?任意の大きな欠点はありますか?私が見るの利点は、私が保存されたデータを操作したいとき、私はすぐに私は必要なモジュールをインポートすることができるということです。あなたが別のパーサまたはローダ機能を必要としないため、また、モジュールは、アプリケーションの残りの部分から別々に使用することができます。

役に立ちましたか?

解決

これは合理的だ、と私はすべての時間を行います。もちろん、それはあなたがそれを保存したファイルのようなもののために良い形式ではないので、データを交換するために使用する形式ではありません。

しかし、私はPloneのにウェブサイトの移行を行う際に、たとえば、私はしばしばこのようなページを移行する必要があるかのリストとしてサイト(または新しいものにマップする方法古いURLのリスト、AORに関するデータを取得しますタグのリスト)。これらは、あなたは、通常のWord OCH Excel形式で取得します。また、データは多くの場合、ビットをマッサージニーズ、そして私は他のいくつかの情報を1つのURLをマッピングする辞書ですすべての意図や目的のために何で終わるます。

確かに、私は<全角> のCVSとしてのことを保存し、辞書にそれを解析することができます。しかし、その代わりに、私は通常の辞書とPythonのファイルとして保存します。コードを保存します。

だから、はい、それは合理的だ、いやそれはあなたが保存したファイルの任意の並べ替えのために使用すべき形式ではありません。それは、しかし、多くの場合、上記のように、コンフィギュレーションとの国境にまたがるデータのために使用されます。

他のヒント

この方法を操作することによって、あなたは、利便性のいくつかのささやかを得ることはできますが、そのために価格の多くの種類を支払います。それはあなたのデータを保存するのにかかるスペース、そしてそれは保存し、再読み込み、大幅に上がるために、両方のにかかる時間。およびセキュリティ露出が無制限である - それはあなたのユーザーIDの下で実行されるように自分の好きなコードを挿入するために、任意の攻撃者のための容易な手段を提供することになるとして、あなたは猛烈に、あなたはモジュールをリロードし、そこからのパスを守る必要があります(pickle自体は盤石ではありませんこの構成に比べて、セキュリティ面では、しかし、それは輝く; - )

すべてのすべてで、私は、よりシンプルで伝統的な配置を好む:実行可能コードは(モジュールのコンパイル後にR / Wである必要はありません典型的なコードローディングパス、上の)一つのモジュールに住んでいる - それがロードされますただ一度、コンパイル済みのフォームから。私は維持したい場合は、データは、主に標準おそらく、このようなJSON、CSV、XML、など多言語のものを含むもの(...&C、多くの適切な形式のいずれかで自分のファイル(またはDBの一部など)に住んでいます簡単に将来的には他の言語からこれらのデータをロードするためのオプションオープン)。

の最大の欠点は、ファイルが本当に悪い可能性があり、任意のコードが含まれていないことを保証するのは難しいので、それが潜在的なセキュリティ上の問題であるということです。他の誰のであれば、ファイルへの書き込みアクセス権を持っているよりも、このアプローチを使用しないでください。

合理的なオプションは、ピクルスのモジュール、特別に設計されているを使用するかもしれませんディスクへのPythonの構造を保存し、復元します。

アレックスマルテッリの答えは絶対に、洞察力と私は彼に同意します。しかし、私はさらに一歩進み、具体的な提言作ります:JSONを使用する

JSONは単純であり、Pythonのデータ構造はそれにうまくマップ。そして、JSONを操作するためのいくつかの標準ライブラリやツールがあります。 Pythonの3.0以降でjsonモジュールはのsimplejson に基づいているので、私は中simplejsonを使用しますPythonの3.0以降ではPython 2.xとjsonます。

2番目の選択肢は、XMLです。など、XMLはより複雑に、そしてちょうど見て(あるいは単にテキストエディタで編集)することが困難であるが、それを検証するためのツールの広大な富があり、それをフィルタリングし、それを編集します。

あなたのデータの保存と検索ニーズが全く自明になる場合は、

また、実際のデータベースを使用することを検討してください。 SQLiteののは素晴らしいです:それは小さなだし、小規模なデータベースのために非常に速く動作しますが、それは本当の実際のSQLデータベースです。私は間違いなく代わりにデータベースと対話するためにSQLを学習のPythonのORMを使用します。 SQLiteのための私のお気に入りのORMは次のようになりの(小型でシンプルな)、またはのhref <からORM =」 http://www.djangoproject.com/」のrel = 『nofollowをnoreferrer』>ジャンゴを(あなたも、SQLでテーブルを作成する方法を学習する必要はありません!)そして、あなたはSQLiteのを脱却する場合は、移動することができます実際のデータベースまで、このような PostgreSQLののよう。あなた自身が保存したデータを検索するループをたくさん書いて見つけ、あなたが依存関係を施行する必要がある場合は特に、データベースに行く考える(fooが削除された場合など、バーがあまりにも削除する必要があります)。

もし
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top