0

長さ 4807100171 の 0 と 1 の文字列をpickleファイルにダンプしています。以前に問題がbitarrayあり、ピクルが問題の解決策になるかどうかを確認したかったからです。ただし、ロードした後、長さは 512132875 になりました。

何故ですか?

pickle に制限があるかどうかを検索しましたが、何も見つかりませんでした...よく知られている理由がある場合、正しいキーワードを使用していない可能性があります...

編集:

ランダムな値の文字列を埋めることができるbので、お好みの手法で 4807100171 の長さを得ることができます - おそらく単純な for ループで 4807100171 に行くようなものです。ここではあまり必要ありません。次に、次のように文字列をダンプしbます。

b = ""
for i in range(4807100171)
    b += 0

import cPickle as pickle
pickle.dump(b, open("string.p", "wb"), pickle.HIGHEST_PROTOCOL)
4

1 に答える 1

0

これは明らかに整数オーバーフローの問題です - 4807100171 から 2**32 を引くと 512132875 になることに注意してください。テキスト ピクル形式 (プロトコル バージョン 0) を使用するとこの問題を回避できるように見えますが、テキスト ピクルは一般的に長く、このサイズの文字列を処理するには途方もない量のメモリが必要になります。私は実際にこれをテストしていません - どのコンピュータにも十分なメモリがないと思います!

この 1 つの文字列だけが格納される場合は、文字列自体をファイルに書き込む方がはるかに簡単です。

于 2012-10-16T02:48:01.737 に答える