2015-08-08 17 views
5

Łączę się z interfejsem API, aby zaczepić niektóre dane. Dane wyjściowe to raport zawierający wielowierszowy nagłówek połączony z tradycyjnym nagłówkiem jednoliniowym.Pomijanie więcej niż jednego wiersza w języku Python csv

przykład:

1. Document Name: Test 
2. Document Date: 8/7/2015 
3. Document ID: 3804804 
4. Document Author: Joe Blow 
5. 
6. Date, ID, Name, Age, Sex, Result 
7. 8/7/2015, 2808380, Sara Jenkings, 33, F, 208.20 

Na przykład, chce przejść przez linie 1 - 5 i zapisywać rząd po linii 6 jako nagłówku i wszystkich innych rzędów po tym jak normalnych komórek.

Teraz wiem, jak przejść do następnego wiersza z następnym (czytnik, Brak), ale jak pominąć więcej niż jeden wiersz, jeśli wiem, że liczba wierszy do pominięcia będzie konsekwentnie 5 wierszy, jak w przykładzie?

Każda pomoc jest doceniana. Zwykle używam bazy danych, aby ominąć wiersze, ale chcę sprawdzić, czy mogę poprawnie zapisać dane w Pythonie, a baza danych nie wykona więcej pracy.

Odpowiedz

6

Można użyć itertools.islice, mijając linię chcesz rozpocząć pisanie od jako drugi parametr tak dla linii 6 jest 0 oparte użyć 5, Jeżeli przystanek jest None, wtedy iteracja trwa do momentu iterator jest wyczerpany

import csv 

from itertools import islice 

with open("in.csv") as f, open("out.csv","w") as out: 
    r = csv.reader(islice(f, start=5,stop=None)) 
    wr = csv.writer(out) 
    wr.writerows(r) 

ty nie koniecznie moduł csv jeśli utrzymanie linii jak:

with open("in.csv") as f, open("out.csv","w") as out: 
    r = islice(f, 5 ,None) 
    out.writelines(r) 
+0

Dzięki. Musiałem zapisać dane wyjściowe do pliku csv, a następnie utworzyć kolejny plik, aby wprowadzić wynik islice jako wyczyszczony plik CSV. Udało się to bez modułu csv, ponieważ dane są już w formacie csv ze strumienia. Ale czy istnieje sposób na wykorzystanie islice z przesyłanymi strumieniowo danymi, czy też zawsze muszę wyprowadzić dane do pliku csv (in.csv) i uruchomić ten plik przez islice? – Fastidious

+0

Skąd pochodzą dane? –

+0

Dane pochodzą z interfejsu API (żądanie HTTP za pośrednictwem Pythona). – Fastidious

1

Możesz dodać licznik i if do for pętla.

count = 0 
for line in opened_file: 
    if count < 5: 
     count += 1 
     continue 
    #Parse lines 
Powiązane problemy