Diferencia entre revisiones de «Usuario:Lmorillas/modulo programacion/python/csv»
De WikiEducator
Línea 47: | Línea 47: | ||
reader = csv.DictReader(fin, delimiter=";") | reader = csv.DictReader(fin, delimiter=";") | ||
</source> | </source> | ||
+ | |||
+ | {{/ejercicio cvs euskadi}} |
Última revisión de 22:13 2 dic 2011
Contenido
Ficheros CSV
La información de una hoja de cálculo se puede exportar/importar desde un fichero csv. Python tiene soporte para tratar ficheros csv. Un fichero csv es un fichero de texto.
Lectura
import csv with open('zaragoza_2010_10.csv') as fin: reader = csv.reader(fin, delimiter=";") for fila in reader: print fila
['Países', 'HOMBRES', 'MUJERES', 'TOTAL'] ['Rumania', '16704', '14487', '31191'] ['Ecuador', '5612', '5713', '11325'] ['Marruecos', '5042', '3007', '8049']
Escritura
with open('codigo_ascii.txt', 'w') as fout: writer = csv.writer(fout) ascii_a = ord('a') for n in range(26): writer.writerow((chr(ascii_a+n), ascii_a + n))
Quoting
writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
Dialectos
>>> csv.list_dialects() ['excel-tab', 'excel']
Se pueden crear dialectos:
csv.register_dialect(nombre, delimiter="|")
Usando nombres de campos
with open('zaragoza_2010_10.csv') as fin: # cuidado, toma la primera fila como títulos # usad parámetro fieldnames si no reader = csv.DictReader(fin, delimiter=";")
Ejercicio con fichero csv de opendata euskadi
Usa los datos del fichero csv de http://opendata.euskadi.net/w79-contgen/es/contenidos/ds_general/sueldos_altos_cargos_2011/es_sueldos/altos_cargos_asesores.html Crea un programa que:
|
Tip:
Los ficheros tienen caracteres codificados y pueden dar problemas si no se codifican bien. Una buena práctica es trabajar con unicode, como muestra en este ejemplo.
# Siguiendo nuestro ejemplo: import urllib2 url = 'http://opendata.euskadi.net/w79-contgen/es/contenidos/ds_general/sueldos_altos_cargos_2011/es_sueldos/contenidos/ds_general/sueldos_altos_cargos_2011/es_sueldos/adjuntos/sueldos_2011.csv' req = urllib2.urlopen(url) content = req.read() # extraer el encoding de la cabecera encoding=req.headers['content-type'].split('charset=')[-1] # convertir a unidoce, usando el encoding apropiado ucontent = unicode(content, encoding)