Quiero csv.DictReader
para deducir los nombres de campo del archivo. The docs say "Si se omite el parámetro fieldnames, los valores en la primera fila del csvfile se usarán como nombres de campo.", pero en mi caso la primera fila contiene un título y la segunda fila que contiene los nombres.Cómo omitir líneas de encabezado previo con csv.DictReader?
No puedo aplicar next(reader)
según Python 3.2 skip a line in csv.DictReader porque la asignación del nombre de campo tiene lugar al inicializar el lector (o lo estoy haciendo mal).
El csvfile (exportada desde Excel 2010, original source):
CanVec v1.1.0,,,,,,,,,^M
Entity,Attributes combination,"Specification Code
Point","Specification Code
Line","Specification Code
Area",Generic Code,Theme,"GML - Entity name
Shape - File name
Point","GML - Entity name
Shape - File name
Line","GML - Entity name
Shape - File name
Area"^M
Amusement park,Amusement park,,,2260012,2260009,LX,,,LX_2260009_2^M
Auto wrecker,Auto wrecker,,,2360012,2360009,IC,,,IC_2360009_2^M
Mi código:
f = open(entities_table,'rb')
try:
dialect = csv.Sniffer().sniff(f.read(1024))
f.seek(0)
reader = csv.DictReader(f, dialect=dialect)
print 'I think the field names are:\n%s\n' % (reader.fieldnames)
i = 0
for row in reader:
if i < 20:
print row
i = i + 1
finally:
f.close()
resultados actuales:
I think the field names are:
['CanVec v1.1.0', '', '', '', '', '', '', '', '', '']
resultado deseado:
I think the field names are:
['Entity','Attributes combination','"Specification Code Point"',...snip]
Me doy cuenta de que sería conveniente simplemente eliminar la primera fila y continuar, pero estoy tratando de acercarme lo más posible a la lectura de los datos in situ que pueda y minimizar la intervención manual.
Esta es una solución más flexible, siempre que se sepa con certeza un nombre de campo (una expectativa razonable). Gracias. –