簡體   English   中英

在Python中讀取.csv而不循環遍歷整個文件?

[英]Reading .csv in Python without looping through the whole file?

我看過使用Python的csv.reader的唯一方法是在for循環中,它遍歷整個文件而不保存讀取變量的過去值。 我只需要一次處理(巨大的)文件的2個連續行。 使用csv.reader for循環,我一次只有1行。

有沒有辦法使用Python的csv模塊只接收一行csv文件而不必完成文件的讀取?

我需要將變量設置為第一行中的值,將第二組變量設置為下一行的值,同時使用兩組變量進行計算,然后使用第二組覆蓋第一組變量,並且讀取新行以覆蓋第二組。

沒有什么可以強迫你在循環中使用閱讀器。 只需閱讀第一行,然后閱讀第二行。

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

閱讀CSV:

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

閱讀Python 2.7中的下一行:

    row = readCSV.next()

閱讀Python 3.4中的下一行:

    row = readCSV.__next__()

如果你總是看着兩條連續的線條,那么聽起來就像你可能會因使用成對配方而受益。 來自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

顯而易見的答案似乎是在每次迭代時只存儲前一行。

>>> for x in csv.DictReader(stream):
...   print prevLine
...   print x
...   prevLine = x
....

從傳統知識中肆無忌憚地竊取......主要是剩下的問題是,OP想要對文件的第一行和最后一行做什么?

prevLine = None

for x in csv.DictReader(stream):
   if prevLine is not None:
       DoWork(prevLine, x)
   else:
       Initialize(x)
   prevLine = x

Finalize(prevLine)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM