0

ファイルの値を使用して辞書を作成したいと考えています。

問題は、ディクショナリに追加するすべての情報をロードするのに十分なメモリがないと思うため、ディクショナリに追加するには行ごとに読み取る必要があることです。

キーはデフォルトにすることができますが、値はファイル内の各行から選択されたものになります。ファイルはcsvではありませんが、値を選択できるように常に行を分割しています。

 import sys

 def prod_check(dirname):
    dict1 = {}
    k = 0
    with open('select_sha_sub_hashes.out') as inf:
       for line in inf:
        pline = line.split('|')
        value = pline[3]
        dict1[line] = dict1[k]
        k += 1
        print dict1

 if __name__ =="__main__":
    dirname=sys.argv[1]
    prod_check(dirname)

これは私が作業しているコードであり、値として設定した変数は、データを取得しているファイルの行のインデックスです。ディクショナリを呼び出して値を出力しようとすると問題が発生するようですが、構文の問題か、作成した割り当ての問題である可能性があります。値をキーに追加したいが、キーは 0 ~ 100 のような通常の数値のままにする

4

3 に答える 3

2

「TokyoCabinet」 @http://fallabs.com/tokyocabinet/のようなものを見てください。これは、Pythonバインディングを持ち、かなり効率的です。京都内閣もありますが、ライセンスは少し制限があります。

この以前のS/O投稿もチェックしてください:Linux用の信頼性が高く効率的なキーバリューデータベース?

于 2012-07-17T16:23:55.660 に答える
2

ディクショナリ全体を一度に RAM に格納するのに十分なメモリがない場合は、anydbm、bsddb、および/または gdbm を試してください。これらは、キーと値のペアをディスク上の単一テーブルのキー文字列と値文字列のデータベースに保持する辞書のようなオブジェクトです。

必要に応じて、以下を検討してください: http://stromberg.dnsalias.org/~strombrg/cachedb.html ...これにより、シリアル化された表現とシリアル化されていない表現の間でかなり透過的に変換できます。

于 2012-07-17T16:16:10.667 に答える
1

そのため、主な問題はファイルを行ごとに読み取ることであるかのように聞こえます。ファイルを 1 行ずつ読み取るには、次のようにします。

with open('data.txt') as inf:
   for line in inf:
       # do your rest of processing

を使用する利点は、with作業が完了したとき、または例外が発生したときに、ファイルが自動的に閉じられることです。

--

元の投稿にはコードが含まれていなかったことに注意してください。問題をさらに説明するために、このコードのコピーが組み込まれているようです。

于 2012-07-17T15:44:23.243 に答える