leer - manipular csv python
Pythonically agregar encabezado a un archivo csv (3)
Esto funcionó para mí.
header = [''row1'', ''row2'', ''row3'']
some_list = [1, 2, 3]
with open(''test.csv'', ''wt'', newline ='''') as file:
writer = csv.writer(file, delimiter='','')
writer.writerow(i for i in header)
for j in some_list:
writer.writerow(j)
Escribí un script de Python fusionando dos archivos csv, y ahora quiero agregar un encabezado al csv final. Intenté seguir las sugerencias que se informaron here y obtuve el siguiente error: expected string, float found
. ¿Cuál es la forma más pitónica de arreglar esto?
Aquí está el código que estoy usando:
import csv
with open(''combined_file.csv'', ''wb'') as outcsv:
writer = csv.DictWriter(outcsv, fieldnames = ["Date", "temperature 1", "Temperature 2"])
writer.writeheader()
with open(''t1.csv'', ''rb'') as incsv:
reader = csv.reader(incsv)
writer.writerows(row + [0.0] for row in reader)
with open(''t2.csv'', ''rb'') as incsv:
reader = csv.reader(incsv)
writer.writerows(row[:1] + [0.0] + row[1:] for row in reader)
La clase DictWriter()
espera diccionarios para cada fila. Si todo lo que quería hacer era escribir un encabezado inicial, usar un csv.writer()
regular y pasar una fila simple para el encabezado:
import csv
with open(''combined_file.csv'', ''wb'') as outcsv:
writer = csv.writer(outcsv)
writer.writerow(["Date", "temperature 1", "Temperature 2"])
with open(''t1.csv'', ''rb'') as incsv:
reader = csv.reader(incsv)
writer.writerows(row + [0.0] for row in reader)
with open(''t2.csv'', ''rb'') as incsv:
reader = csv.reader(incsv)
writer.writerows(row[:1] + [0.0] + row[1:] for row in reader)
La alternativa sería generar diccionarios al copiar a través de sus datos:
import csv
with open(''combined_file.csv'', ''wb'') as outcsv:
writer = csv.DictWriter(outcsv, fieldnames = ["Date", "temperature 1", "Temperature 2"])
writer.writeheader()
with open(''t1.csv'', ''rb'') as incsv:
reader = csv.reader(incsv)
writer.writerows({''Date'': row[0], ''temperature 1'': row[1], ''temperature 2'': 0.0} for row in reader)
with open(''t2.csv'', ''rb'') as incsv:
reader = csv.reader(incsv)
writer.writerows({''Date'': row[0], ''temperature 1'': 0.0, ''temperature 2'': row[1]} for row in reader)
Simplemente agrega una fila adicional antes de ejecutar el ciclo. Esta fila contiene su nombre de encabezado de archivo CSV.
schema = [''a'',''b'',''c'',''b'']
row = 4
generators = [''A'',''B'',''C'',''D'']
with open(''test.csv'',''wb'') as csvfile:
writer = csv.writer(csvfile, delimiter=delimiter)
# Gives the header name row into csv
writer.writerow([g for g in schema])
#Data add in csv file
for x in xrange(rows):
writer.writerow([g() for g in generators])