在Python中读取.csv而不循环遍历整个文件?

mar*_*ary 27 python csv iterator next

我看过使用Python的csv.reader的唯一方法是在for循环中,它遍历整个文件而不保存读取变量的过去值.我只需要一次处理(巨大的)文件的2个连续行.使用csv.reader for循环,我一次只有1行.

有没有办法使用Python的csv模块只接收一行csv文件而不必完成文件的读取?

我需要将变量设置为第一行中的值,将第二组变量设置为下一行的值,同时使用两组变量进行计算,然后使用第二组覆盖第一组变量,并且读取新行以覆盖第二组.

Bry*_*ley 41

没有什么可以强迫你在循环中使用阅读器.只需阅读第一行,然后阅读第二行.

import csv
rdr = csv.reader(open("data.csv"))
line1 = rdr.next() # in Python 2, or next(rdr) in Python 3
line2 = rdr.next()
Run Code Online (Sandbox Code Playgroud)

  • @mary:在我的示例中,line1只是一个列表,因此line1 [0]将是第一列,line1 [1]是第二列,依此类推。如果你愿意,你可以做类似“(col1,col2,col3)”的事情=第1行` (2认同)

Jef*_*ris 5

如果你总是看着两条连续的线条,那么听起来就像你可能会因使用配对配方而受益.来自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)
Run Code Online (Sandbox Code Playgroud)

你会像这样使用它:

for first_dict, second_dict in pairwise(csv.DictReader(stream)):
    # do stuff with first_dict and second_dict
Run Code Online (Sandbox Code Playgroud)


Hat*_*tef 5

阅读CSV:

readCSV = csv.reader(csvFile, delimiter=',')
Run Code Online (Sandbox Code Playgroud)

阅读Python 2.7中的下一行:

    row = readCSV.next()
Run Code Online (Sandbox Code Playgroud)

阅读Python 3.4中的下一行:

    row = readCSV.__next__()
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用`row = next(readCSV)`.这适用于python 2.7和3,除了调用您描述的方法之外什么都不做. (8认同)