0

私は初めて Python をいじっており、この言語を理解するためにいじっている小さなプロジェクトを手元に持っています。私は基本的に、良い解決策を思いついたのか、それともそれを行うためのより良い方法があるのか​​ を知ることに興味があります.

基本的に、カンマで区切られた行ごとに約3つの整数を含む整数をリストする(または整数をリストする必要がある)CSVファイルがあります。これを行う私の方法は次のとおりです。

  1. readline() を使用して各行を変数に読み込みます
  2. コンマを区切り文字として指定して変数を分割する
  3. 変数が分割されたら、このサイズ 3 の配列の各要素にアクセスし、それが整数か他のデータ型かをチェックするテストを行います

これは非常に単純明快で、技術的には「うまくいきます」ということです。しかし、整数で構成されるファイルを読み取るために pickle モジュールを使用することを提案している Python ドキュメントのいくつかを読んだ後、私の心は矛盾しています。

Python ドキュメントへのリンク

どうやら、readline が読み込まれている場合、各行は文字列として読み込まれます。これは、整数も文字列として読み込まれ、ここで精度が失われる可能性があることを意味しますか? Pickle は、すべてを文字列表現に変換し、精度を失うことなく元のデータ型表現に戻すことができる魔法のモジュールです。

IMHO、私のプログラム コードは pickle モジュールを使用しなくても問題なく動作しますが、良いコードを書くために、皆さんは何を提案し、その背後にある理論的根拠は何ですか:

4

3 に答える 3

7

picklepickleファイルは、モジュール自体によって生成された特定の形式であると予想されます。CSV ファイルを読み取るには、csv代わりにモジュールを使用する必要があります。

また、Python は任意の長さの整数をサポートしているため、それらが文字列であることを心配する必要はありません。それらが変換されると、最後の桁がすべて取得されます。

>>> int('1234567890123456789012345678901234567890')
1234567890123456789012345678901234567890L
于 2012-08-12T05:48:21.343 に答える
4

picklemoduleのドキュメントを読むと、最初の段落にモジュールの目的がよくまとめられています。

このpickleモジュールは、Python オブジェクト構造をシリアライズおよびデシリアライズするための基本的かつ強力なアルゴリズムを実装しています。

pickleほとんどの場合、Python オブジェクトをファイルにダンプし、それらを再度読み取ることを目的としています。

精度に関しては、CSV と Python の pickle ファイルの両方がデータを文字列として格納しているため、精度が失われることはありません。

個人的にはピクルスは使いません。単純なデータが他のプログラムによって読み取られたり、グラフィカル エディターで編集されたりするのを防ぎます。心配しなければならない複雑な辞書やその他の Python オブジェクトがある場合は、pickle が適切な保存方法になります。ただし、この場合はやり過ぎです。

于 2012-08-12T05:55:42.090 に答える
1

それはすべて、整数のファイルがどこから来ているか、および他のソースから作成/編集するかどうかによって異なります。

Pickle は python 構造を保存/取得できますが、他のシステムや、場合によっては python バージョンからのデータの交換には適していません。

于 2012-08-12T05:53:47.323 に答える