在Python中如何读取.csv文件而不遍历整文件?
我见过的使用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()