ordenar manipular leer guardar como archivos archivo python csv header

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])