Ficheros CSV

De WikiEducator
Saltar a: navegación, buscar


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

Icon activity.jpg

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:

  • genere un nuevo fichero csv con los datos de retribuciones anuales (2009, 2010 y 2011)
  • muestre la evolución de los sueldos en porcentajes entre los 3 años
  • haga una gráfica (sueldos_euskadi.png) con la evolución de los sueldos.





Icon present.gif
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)