在Python中如何读取.csv文件而不遍历整文件?

27 投票
5 回答
47335 浏览
提问于 2025-04-16 00:20

我见过的使用Python的csv.reader的方法都是在一个循环里,这样会把整个文件都读完,而且不会保存之前读到的变量值。可是我只需要同时处理文件中两行相邻的数据,而使用csv.reader的循环时,我每次只能读到一行。

有没有办法让Python的csv模块只读取csv文件中的一行,而不需要把整个文件都读完呢?

我需要把第一行的值设置给一些变量,然后把第二行的值设置给另一组变量。接着,我想同时用这两组变量进行计算,然后用第二组变量的值覆盖第一组的值,再读取新的一行来更新第二组变量。

5 个回答

5

读取CSV文件:

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

在Python 2.7中读取下一行:

    row = readCSV.next()

在Python 3.4中读取下一行:

    row = readCSV.__next__()
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)

你可以这样使用它:

for first_dict, second_dict in pairwise(csv.DictReader(stream)):
    # do stuff with first_dict and second_dict
43

你并不一定要在循环中使用读取器。你可以先读第一行,然后再读第二行。

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

撰写回答