27

Pythonのcsv.readerが使用されているのを確認した唯一の方法は、forループです。これは、読み込まれた変数の過去の値を保存せずにファイル全体を処理します。一度に(巨大な)ファイルの2つの連続した行を処理する必要があるだけです。csv.reader forループを使用すると、一度に1行しかありません。

Pythonのcsvモジュールを使用して、ファイルを最後まで読み終えることなく、csvファイルの1行だけを取り込む方法はありますか?

変数を最初の行の値に設定し、2番目の変数セットを次の行の値に設定し、2つの変数セットを同時に計算に使用してから、最初の変数セットを2番目のセットで上書きする必要があります。新しい行を読み取って、2番目のセットを上書きします。

4

5 に答える 5

42

リーダーをループで使用することを強制するものは何もありません。最初の行を読んでから、2番目の行を読んでください。

import csv
rdr = csv.reader(open("data.csv"))
line1 = rdr.next() # in Python 2, or next(rdr) in Python 3
line2 = rdr.next()
于 2010-06-23T16:10:04.600 に答える
5

常に正確に2つの連続した行を見ている場合は、ペアワイズレシピを使用することでメリットが得られるように思えます。itertoolsモジュールから:

from itertools import tee, izip
def pairwise(iterable):
   "s -> (s0,s1), (s1,s2), (s2, s3), ..."
   a, b = tee(iterable)
   next(b, None)
   return izip(a, b)

あなたはこのようにこれを使うでしょう:

for first_dict, second_dict in pairwise(csv.DictReader(stream)):
    # do stuff with first_dict and second_dict
于 2010-06-23T17:04:30.147 に答える
5

CSVを読む:

readCSV = csv.reader(csvFile, delimiter=',')

Python2.7の次の行を読んでください。

    row = readCSV.next()

Python3.4の次の行を読んでください。

    row = readCSV.__next__()
于 2015-01-15T13:13:29.987 に答える
4

明白な答えは、各反復で前の行を保存することであるように思われます。

>>> for x in csv.DictReader(stream):
...   print prevLine
...   print x
...   prevLine = x
....
于 2010-06-23T16:09:40.887 に答える
4

TKからの露骨な盗難......主に残っている問題は、OPがファイルの最初と最後の行で何をしたいのかということです。

prevLine = None

for x in csv.DictReader(stream):
   if prevLine is not None:
       DoWork(prevLine, x)
   else:
       Initialize(x)
   prevLine = x

Finalize(prevLine)
于 2010-06-23T16:26:13.983 に答える