Добавить заголовок для 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