7

私は巨大な CSV ファイル (20 ~ 25Mln 行) を操作していますが、多くの理由でそれらを小さな断片に分割したくありません。

私のスクリプトは、 csvモジュールを使用して行ごとにファイルを読み取ります。次の反復で読み取られる行 (または読み取られた行) の位置 (バイト番号) が必要です。

私は試した

>>> import csv
>>> f = open("uscompany.csv","rU")
>>> reader = csv.reader(f)
>>> reader.next()
....
>>> f.tell()
8230

しかし、csvモジュールはファイルをブロックごとに読み取るようです。反復を続けると同じ位置になるので

>>> reader.next()
....
>>> f.tell()
8230

助言がありますか?ご意見をお聞かせください。

4

3 に答える 3

8

「バイト位置」とは、ファイルを通常のテキストファイルとして読み込んだかのようにバイト位置を意味する場合、私の提案はまさにそれを行うことです。ファイルを1行ずつテキストとして読み込み、その方法で行内の位置を取得します。csvモジュールを使用して、CSVデータを行ごとに解析することもできます。

for line in myfile:
  row = csv.reader([line]).next()

この種のバイト位置を提供しないことは、CSVリーダーにとって完全に良い設計だと思います。これは、CSVコンテキストではあまり意味がないためです。結局のところ、CSVに関する限り、はまったく同じ4バイトのデータですが"data"、オプションの周囲の引用符が使用されたかどうかに応じて、2バイト目または1バイト目になる可能性があります。datad

于 2012-08-24T13:17:07.560 に答える
6

簡単な答え:できません。csvreader API ではバイト位置を取得できません

于 2012-08-24T12:48:36.293 に答える