5

次のコードを実行しようとしていますが、何らかの理由で「TypeError: limit must be an integer」というエラーが発生します。

csvデータファイルの読み込み

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)

エラーは星印の行で発生します。ファイルが大きすぎて正常に読み取れないため、csv read ステートメントの上に余分なビットを追加しただけです。または、ファイルをcsvからテキストファイルに変更することもできますが、これによりデータがさらに破損するかどうかはわかりません.ファイルが2GBを超えるため、実際にはデータを表示できず、開くのにコストがかかります.

何か案は?私はPythonにはかなり慣れていませんが、もっと多くのことを学びたいと思っています.

4

2 に答える 2

4

これが答えになるかどうかはわかりませんが、ここにいくつかのことがあります:

まず、csv リーダーは CSV の行ごとに自動的にバッファリングするため、ファイル サイズは 2KB であろうと 2GB であろうと、それほど重要ではありません。

重要なのは、フィールド自体の列数またはデータ量です。この CSV の各列に戦争と平和が含まれている場合は、読み取りに問題が発生します。

潜在的にデバッグするいくつかの方法は、 を実行print sys.maxsizeし、Python インタープリターを開いてからimport sys, csvを実行することcsv.field_size_limit(sys.maxsize)です。非常に小さな数値または例外が発生する場合は、Python のインストールに問題がある可能性があります。それ以外の場合は、より単純なバージョンのファイルを取得してみてください。おそらく最初の行、または最初の数行と 1 列だけです。可能な限り最小のケースを再現し、システムの変動性とファイル サイズを取り除くことができるかどうかを確認してください。

于 2013-09-14T06:46:39.330 に答える