2015-01-27 10 views
7

Sto cercando di aggiungere un'intestazione al mio file CSV.Aggiungi un'intestazione per il file CSV?

Sto importando i dati da un file .csv che ha due colonne di dati, ciascuna contenente numeri float. Esempio:

11 22 
    33 44 
    55 66 

Ora voglio aggiungere un'intestazione per entrambe le colonne come:

ColA ColB 
    11 22 
    33 44 
    55 66 

Ho provato questo:

with open('mycsvfile.csv', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerow(('ColA', 'ColB')) 

ho usato 'a' per aggiungere i dati, ma questo aggiunto i valori nella riga inferiore del file invece della prima riga. C'è un modo per sistemarlo?

+0

è necessario mostrare un esempio completo che dimostra la problema. –

+0

Possibile duplicato: http://stackoverflow.com/questions/4454298/prepend-a-line-to-an-existing-file-in-python – abought

+0

ho già visto quel prob, ma penso che differisca dalla prospettiva del file .csv . –

risposta

10

Un modo è leggere tutti i dati, quindi sovrascrivere il file con l'intestazione e scrivere nuovamente i dati. Questo potrebbe non essere pratico con un grande file CSV:

#!python3 
import csv 
with open('file.csv',newline='') as f: 
    r = csv.reader(f) 
    data = [line for line in r] 
with open('file.csv','w',newline='') as f: 
    w = csv.writer(f) 
    w.writerow(['ColA','ColB']) 
    w.writerows(data) 
+0

grazie mille. Stavo cercando qualcosa del genere. –

5

Penso che dovresti usare i panda per leggere il file csv, inserire le intestazioni/etichette delle colonne ed emettere il nuovo file csv. supponendo che il tuo file csv sia delimitato da virgole. qualcosa del genere dovrebbe funzionare:

from pandas import read_csv 

    df = read_csv('test.csv') 
    df.columns = ['a', 'b'] 
    df.to_csv('test_2.csv') 
0

In questo caso, non è necessario il modulo CSV. È necessario il modulo fileinput in quanto consente in-place editing:

import fileinput 

for line in fileinput.input(files=['mycsvfile.csv'], inplace=True): 
    if fileinput.isfirstline(): 
     print 'ColA,ColB' 
    print line, 

Nel codice precedente, la dichiarazione print stamperà al file a causa del parametro inplace=True.

-1

È possibile impostare reader.fieldnames nel codice come lista come nel tuo caso

with open('mycsvfile.csv', 'a') as fd: 
     reader = csv.DictReader(fd) 
     reader.fieldnames = ["ColA" , "ColB"] 
     for row in fd