Чтение .csv в Python без прокрутки всего файла?
Единственный способ, с помощью которого я использовал Python csv.reader, - это цикл for, который проходит через весь файл без сохранения прошлых значений read в переменных. Мне нужно работать только с двумя последовательными строками (огромного) файла за раз. Используя цикл csv.reader для цикла, я имею только 1 строку за раз.
Есть ли способ использовать модуль csv Python для ввода только одной строки файла csv без необходимости заканчивать чтение файла до конца?
Мне нужно установить переменные в значения в первой строке, установить второй набор переменных в значения следующей строки, использовать два набора переменных одновременно для вычислений, а затем переписать первый набор переменных на второй установить и прочитать новую строку, чтобы перезаписать второй набор.
Ответы
Ответ 1
Нет ничего, что заставило бы вас использовать читателя в цикле. Просто прочитайте первую строку, затем прочитайте вторую строку.
import csv
rdr = csv.reader(open("data.csv"))
line1 = rdr.next() # in Python 2, or next(rdr) in Python 3
line2 = rdr.next()
Ответ 2
Если вы всегда смотрите ровно на две последовательные строки, это звучит для меня так, как будто вы могли бы воспользоваться парой recipe, Из модуля 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
Ответ 3
Считать CSV:
readCSV = csv.reader(csvFile, delimiter=',')
Прочитайте следующую строку в Python 2.7:
row = readCSV.next()
Прочитайте следующую строку в Python 3.4:
row = readCSV.__next__()
Ответ 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)
Ответ 5
Очевидным ответом является просто сохранение предыдущей строки на каждой итерации.
>>> for x in csv.DictReader(stream):
... print prevLine
... print x
... prevLine = x
....