我见过Python的csv.reader使用的唯一方法是在for循环中,它遍历整个文件,而不保存读入变量的过去值。我一次只需要处理(巨大的)文件的两个连续行。使用csv.reader for循环,我一次只有一行。有没有一种方法可以使用Python的csv模块来只接收csv文件的一行,而不必将文件阅读到最后?我需要将变量设置为第一行的值,将第二组变量设置为下一行的值,同时使用两组变量进行计算,然后用第二组变量覆盖第一组变量,并读取新的一行来覆盖第二组变量。
yqyhoc1h1#
没有什么强迫你在循环中使用阅读器。先读第一行,然后读第二行。
import csv rdr = csv.reader(open("data.csv")) line1 = rdr.next() # in Python 2, or next(rdr) in Python 3 line2 = rdr.next()
qf9go6mv2#
如果你总是在看两条连续的线,在我看来,你可能会从使用成对食谱中受益。从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
j9per5c43#
读取CSV:
readCSV = csv.reader(csvFile, delimiter=',')
阅读Python 2.7中的下一行:
row = readCSV.next()
阅读Python 3.4中的下一行:
row = readCSV.__next__()
7uhlpewt4#
显而易见的答案似乎是在每次迭代中只存储前一行。
>>> for x in csv.DictReader(stream): ... print prevLine ... print x ... prevLine = x ....
lx0bsm1f5#
公然偷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条答案
按热度按时间yqyhoc1h1#
没有什么强迫你在循环中使用阅读器。先读第一行,然后读第二行。
qf9go6mv2#
如果你总是在看两条连续的线,在我看来,你可能会从使用成对食谱中受益。从itertools模块:
你可以这样使用它:
j9per5c43#
读取CSV:
阅读Python 2.7中的下一行:
阅读Python 3.4中的下一行:
7uhlpewt4#
显而易见的答案似乎是在每次迭代中只存储前一行。
lx0bsm1f5#
公然偷TK的钱...剩下的问题主要是,OP想对文件的第一行和最后一行做什么?