Python Editar encabezados CSV

Tengo los siguientes datos de un archivo csv llamado temp.

Item,Description,Base Price,Available 2000-000-000-300,AC - CF/M Series Green For Black Hood,299.99,3 2000-000-000-380,AC - CF/M Series Green For White Hood,299.99,3 

Necesito cambiar los encabezados para leer

 Item Number,Item Description,List Price,QTY Available 

He estado buscando preguntas similares aquí y no tengo una solución que pueda entender ya que soy relativamente nuevo en la progtwigción de python. Hasta ahora tengo:

 import csv import os inputFileName = "temp.csv" outputFileName = os.path.splitext(inputFileName)[0] + "_modified.csv" with open(inputFileName) as inFile, open(outputFileName, "w") as outfile: r = csv.reader(inFile) w = csv.writer(outfile) 

Lo que sé, solo lee el archivo original y luego escribiré a _modified. ¿Cómo selecciono los encabezados actuales y luego los cambio para que escriban en el nuevo archivo?

Los encabezados son solo otra fila de datos CSV. Solo escríbalos como una nueva fila en la salida seguida del rest de los datos del archivo de entrada.

 import csv import os inputFileName = "temp.csv" outputFileName = os.path.splitext(inputFileName)[0] + "_modified.csv" with open(inputFileName, 'rb') as inFile, open(outputFileName, 'wb') as outfile: r = csv.reader(inFile) w = csv.writer(outfile) next(r, None) # skip the first row from the reader, the old header # write new header w.writerow(['Item Number', 'Item Description', 'List Price', 'QTY Available']) # copy the rest for row in r: w.writerow(row) 

Para Python 3, use:

 with open(inputFileName, newline='') as inFile, open(outputFileName, 'w', newline='') as outfile: 

y es posible que deba especificar una encoding para sus datos.

Otra solución es usar el módulo fileinput para actualizar el archivo en su lugar:

 import fileinput for line in fileinput.input('temp', inplace=True): if fileinput.isfirstline(): print 'Item Number,Item Description,List Price,QTY Available' else: print line, 

Podrías usar fileinput para esto:

 import fileinput import sys import os inputFileName = "temp.csv" outputFileName = os.path.splitext(inputFileName)[0] + "_modified.csv" with open(outputFileName, "w") as outfile: for line in fileinput.input( [inputFileName], inplace=False): if fileinput.isfirstline(): outfile.write('Item Number,Item Description,List Price,QTY Available\n') else: outfile.write(line)