Чтение .csv в Python без цикличного выполнения через целый файл?

Единственным путем я видел, что используемый csv.reader Python находится в для цикла, который проходит целый файл, не сохраняя прошлые значения чтения в переменных. Я только должен работать с 2 последовательными строками (огромного) файла за один раз. Используя csv.reader для цикла, у меня только есть 1 строка за один раз.

Существует ли способ использовать csv модуль Python для взятия только в одной строке файла CSV, не имея необходимость заканчивать читать файл в конец?

Я должен установить переменные на значения в первой строке, установить второй набор переменных к значениям следующей строки, использовать два набора переменных одновременно для вычислений, затем перезаписать первый набор переменных со вторым набором и считать новую строку для перезаписи второго набора.

27
задан smci 27 August 2016 в 00:25
поделиться

4 ответа

Ничто не заставляет вас использовать читателя в цикле. Просто прочитайте первую строку, затем вторую.

import csv
rdr = csv.reader(open("data.csv"))
line1 = rdr.next() # in Python 2, or next(rdr) in Python 3
line2 = rdr.next()
41
ответ дан 28 November 2019 в 04:50
поделиться

Если вы всегда просматриваете ровно две последовательные строки, мне кажется, вам будет полезно использовать парный рецепт. Из модуля 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
5
ответ дан 28 November 2019 в 04:50
поделиться

Явное кража ТЗ ... ... в основном остается вопрос, что OP хочет делать с первой и последней строками файла?

prevLine = None

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

Finalize(prevLine)
4
ответ дан 28 November 2019 в 04:50
поделиться

Очевидным ответом кажется простое сохранение предыдущей строки на каждой итерации.

>>> for x in csv.DictReader(stream):
...   print prevLine
...   print x
...   prevLine = x
....
4
ответ дан 28 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: