2015-08-08 3 views
5

Mi sto connettendo a un'API per aggirare alcuni dati. L'output è un report che include un'intestazione multilinea combinata con un'intestazione a riga singola tradizionale.Saltare più di una riga in Python csv

Esempio:

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 

Nell'esempio, voglio saltare linee 1 - 5 e scrivere la riga sulla linea 6 come la riga di intestazione e tutte le altre righe dopo che come righe normali.

Ora, so come saltare una riga con il prossimo (lettore, Nessuno), ma come faccio a saltare più di una riga se so che il numero di righe da saltare sarà costantemente 5 righe come nell'esempio?

Qualsiasi aiuto è molto apprezzato. Normalmente userei un database per saltare le righe, ma voglio vedere se posso avere Python per salvare i dati correttamente senza che il database faccia più lavoro.

risposta

6

È possibile utilizzare itertools.islice, passando la linea che si desidera iniziare a scrivere da come secondo parametro in modo per la linea 6 in fase di 0 sulla base di utilizzare 5, Se fermata è None, allora l'iterazione continua fino a quando l'iteratore si esaurisce

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) 

non è necessariamente bisogno del modulo csv se si stanno mantenendo le linee come è:

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

Grazie. Ho dovuto salvare l'output in un file csv e quindi creare un altro file per inserire l'output di islice come file csv pulito. Ha funzionato perfettamente senza il modulo csv in quanto i dati sono già in formato csv dal flusso. Ma c'è un modo per usare islice con i dati in streaming o devo sempre inviare i dati a un csv (in.csv) ed eseguire quel file attraverso islice? – Fastidious

+0

Da dove provengono i dati? –

+0

I dati provengono da un'API (richiesta HTTP tramite Python, credo). – Fastidious

1

È possibile aggiungere un contatore e un'istruzione if per un per ciclo continuo.

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