2015-01-27 23 views
7

Próbuję dodać nagłówek do mojego pliku CSV.Dołącz nagłówek do pliku CSV?

Importuję dane z pliku .csv, który ma dwie kolumny danych, z których każda zawiera liczby zmiennoprzecinkowe. Przykład:

11 22 
    33 44 
    55 66 

Teraz chcę dodać nagłówek na obu kolumnach, jak:

ColA ColB 
    11 22 
    33 44 
    55 66 

próbowałem to:

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

użyłem 'a' dołączyć dane, ale to dodane wartości w dolnym wierszu pliku zamiast pierwszego wiersza. Czy jest jakiś sposób, aby to naprawić?

+0

Trzeba pokazać kompletny przykład, który pokazuje problem. –

+0

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

+0

Już widziałem ten problem, ale myślę, że różni się on od perspektywy pliku .csv . –

Odpowiedz

10

Jednym ze sposobów jest odczytanie wszystkich danych, a następnie nadpisanie pliku nagłówkiem i ponowne zapisanie danych. To może nie być praktyczne z dużym pliku 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

Dziękuję bardzo. Szukałem czegoś takiego. –

5

Myślę, że powinieneś używać pand do odczytywania pliku csv, wstawiania nagłówków kolumn/etykiet i emitowania nowego pliku csv. zakładając, że twój plik csv jest rozdzielany przecinkami. coś takiego powinno zadziałać:

from pandas import read_csv 

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

W tym przypadku nie potrzebujesz modułu CSV. Musisz moduł fileinput gdyż pozwala w miejscu edycji:

import fileinput 

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

w powyższym kodzie, oświadczenie print będzie drukować do pliku, ponieważ parametru inplace=True.

-1

Można ustawić reader.fieldnames w kodzie formie listy jak w przypadku

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