Czytam.csv w Pythonie bez zapętlania całego pliku?

Jedyny sposób, w jaki widziałem csv Pythona.używany czytnik znajduje się w pętli for, która przechodzi przez cały plik bez zapisywania przeszłych wartości zmiennych read in. Muszę tylko pracować z 2 kolejnymi liniami (ogromnego) pliku na raz. Używając csv.czytnik dla pętli, mam tylko 1 linię na raz.

Czy istnieje sposób na użycie modułu CSV Pythona do pobierania tylko jednej linii pliku csv bez konieczności kończenia czytania pliku do końca?

Muszę ustawić zmienne NA wartości w pierwszej linii, Ustaw drugi zestaw zmiennych na wartości w następnej linii, użyj dwóch zestawów zmiennych jednocześnie do obliczeń, następnie Nadpisz pierwszy zestaw zmiennych drugim zestawem i przeczytaj nową linię, aby nadpisać drugi zestaw.

Author: smci, 2010-06-23

5 answers

Nic nie zmusza cię do używania czytnika w pętli. Po prostu przeczytaj pierwszą linijkę, a następnie przeczytaj drugą linijkę.

import csv
rdr = csv.reader(open("data.csv"))
line1 = rdr.next() # in Python 2, or next(rdr) in Python 3
line2 = rdr.next()
 40
Author: Bryan Oakley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-27 21:20:41

Jeśli zawsze patrzysz na dokładnie dwie kolejne linijki, wydaje mi się, że możesz skorzystać z przepisu parowego . Z modułu 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)

Użyłbyś tego Tak:

for first_dict, second_dict in pairwise(csv.DictReader(stream)):
    # do stuff with first_dict and second_dict
 5
Author: Jeffrey Harris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-23 17:04:30

Przeczytaj CSV:

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

Czytaj następny wiersz w Pythonie 2.7:

    row = readCSV.next()

Przeczytaj następny wiersz w Pythonie 3.4:

    row = readCSV.__next__()
 5
Author: Hatef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-15 13:13:29

Oczywistą odpowiedzią wydaje się być zapisanie poprzedniej linii na każdej iteracji.

>>> for x in csv.DictReader(stream):
...   print prevLine
...   print x
...   prevLine = x
....
 4
Author: TK.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-23 16:09:40

Rażące okradanie TK... ...pozostaje głównie pytanie, Co OP chce zrobić z pierwszą i ostatnią linią pliku?

prevLine = None

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

Finalize(prevLine)
 4
Author: dash-tom-bang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-23 16:26:13