1

csvファイルを読み込もうとしています。問題は、サイズが大きすぎるため、エラー ハンドラーを使用する必要があることです。エラー ハンドラ内で、 を呼び出す必要がありますcsv.field_size_limit()。「制限は整数でなければなりません」というエラーが表示され続けるため、これだけでは機能しません。さらに調査した結果、これはおそらくインストール エラーであることがわかりました。Package Manager を使用してすべてのサードパーティ ツールをインストールしたので、何が問題なのかわかりません。この問題を修正する方法についてのアイデアはありますか?

import sys
import csv
maxInt = sys.maxsize
decrement = True
while decrement:
    decrement = False
    try:
        csv.field_size_limit(maxInt)
    except OverflowError:
        maxInt = int(maxInt/10)
        decrement = True
with open("Data.csv", 'rb') as textfile:
    text = csv.reader(textfile, delimiter=" ", quotechar='|')
    for line in text:
        print ' '.join(line)
4

1 に答える 1

3

簡単な回答: 64 ビット Windows を使用していると思います。その場合は、sys.maxint代わりに を使用してみてくださいsys.maxsizecsv.field_size_limit()実際には、そのサイズのメモリを事前に割り当てようとするため、おそらくまだ問題が発生するでしょう。必要な実際のフィールド サイズを実際に見積もって、おそらくその 2 倍にしたいでしょう。との両方はsys.maxintsys.maxsizeこれには大きすぎます。

詳細な説明: Pythonintオブジェクトは Clong整数を格納します。関連するすべての 32 ビット プラットフォームでは、ポインターまたはメモリ オフセットのサイズと Clong整数の両方が 32 ビットです。ほとんどの UNIXy 64 ビット プラットフォームでは、ポインタまたはメモリ オフセットのサイズと Clong整数の両方が 64 ビットです。ただし、64 ビットの Windows ではlong、ポインタ サイズを 64 ビットに増やしながら、C の整数を 32 ビットのままにすることにしました。sys.maxintは最大の Python int(したがって C long) を表し、sys.maxsizeは最大のメモリ オフセットです。したがって、64 ビット Windows では、Python型はそのサイズの数値を保持できないため、 sys.maxsizePythonlong整数になります。実際には、真正なPythonに収まる数が必要だと思いintますcsv.field_size_limit()int物体。そのため、OverflowErrorおよびlimit must be an integerエラーが発生します。

于 2013-09-19T09:32:16.147 に答える