Добавить заголовок для CSV-файла?

Я пытаюсь добавить заголовок в файл CSV.

я импортирую данные из a .csv-файл, который имеет два столбца данных, каждый из которых содержит номера float. Пример:

  11   22
  33   44
  55   66

теперь я хочу добавить заголовок для обоих столбцов, таких как:

 ColA  ColB
  11    22
  33    44
  55    66

Я попытался это:

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

Я 'a' чтобы добавить данные, но это добавило значения в нижней строке файла вместо первой строки. Я могу как-нибудь это исправить?

5 ответов


один из способов-прочитать все данные, затем перезаписать файл заголовком и снова записать данные. Это может быть нецелесообразно с большим 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)

Я думаю, вы должны использовать pandas для чтения csv-файла, вставки заголовков столбцов / меток и выпуска нового csv-файла. предполагая, что ваш CSV файл с разделителями-запятыми. что-то вроде этого должно работать:

   from pandas import read_csv

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

Я знаю, что вопрос был задан давно. Но для других, натыкающихся на этот вопрос, вот альтернатива Python.

Если у вас есть доступ к sed (вы делаете, если вы работаете на Linux или Mac; вы также можете скачать Ubuntu Bash на Windows 10, и sed придет с ним), вы можете использовать этот однострочный:

sed -i 1i"ColA,ColB" mycsvfile.csv

the-i гарантирует, что sed будет редактировать на месте, что означает, что sed перезапишет файл с заголовком вверху. Это рискованный.

Если вы хотите создать новый файл, этого

sed 1i"ColA,ColB" mycsvfile.csv > newcsvfile.csv

в этом случае вам не нужен модуль CSV. Вам нужно fileinput модуль, поскольку он позволяет редактировать на месте:

import fileinput

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

В приведенном выше коде print инструкция будет напечатана в файл из-за


вы можете установить reader.имена полей в списке код как как в твоем случае

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