Leer ficheros CSV y XLS con Python

Posted by Mi Blog on December 26, 2016

En este post vamos a manejar ficheros csv y xls. Este tipo de ficheros son muy usados actualmente para almacenar información. A continuación, aprenderemos ha leer y escribir archivos de este tipo con Python de una forma sencilla.

Archivos CSV

Vamos a empezar por los archivos con extensión CSV del inglés comma-separated values. Estos archivos son un clásico a la hora de representar datos en forma de tabla.

En primer lugar vamos a hacerlo sin usar ningún módulo adicional, esta es la forma más tediosa cuando queremos leer muchos datos.

with open('fh2.csv') as fh:
    for line in fh:
        print str(line.split(',')[0]), str(line.split(',')[1])
fh.close()

El código anterior lee el archivo fh2.csv línea a línea y lo muestra por pantalla. Y la salida del programa anterior es la siguiente:

Numeros Letras
1 a
2 b
3 c
4 d
5 f
6 g
7 h
8 I
9 j

La forma más habitual de hacer este tipo de lecturas con el módulo csv.

Es muy sencillo:

import csv

f = open('fh2.csv')
lines = csv.reader(f)
for line in lines:
    print str(line[0]), str(line[1])

Este código realiza la misma tarea que el anterior, la salida vuelve a ser:

Numeros Letras
1 a
2 b
3 c
4 d
5 f
6 g
7 h
8 I
9 j

Es posible cambiar el tipo de separador (o delimitador) a ; , de la siguiente forma:

f = open('fh.csv')
lns = csv.reader(f,delimiter=';')

Para facilitar la entrada y salida de datos podemos usar los dialect. Los dialect son clases predefinidas la más habital es excel. Para hacer uso de ella solo tenemos que hacer lo siguiente:

f = open('fh.csv')
lines = csv.reader(f, dialect="excel")
print csv.list_dialects()

Por útlimo vamos a crear un nuevo archivo y a escribir en él.

Lo haremos de la siguiente forma:

f = open('fh.csv', 'w')
obj = csv.writer(f, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
obj.writerow(['10', 'A'])
f.close()

Cómo podemos ver se ha creado un archivo fh.csv y se ha escrito una línea que contiene en la primera columna un 10 y en la segunda un A.

Archivos XLS

Si queremos leer archivos de tipo xls, que es el formato de Excel (junto s xlsx) podemos instalar las libreriás xlrd y xlwt.

Para instalar los módulos que vamos a usar:

$ sudo pip install xlrd

En este ejemplo crearemos el archivo y después lo leeremos.

Creamos nuestro archivo de datos:

import xlwt

list1 = [1, 2, 3, 4, 5]
list2 = ['a', 'b', 'c', 'd', 'e']
wb = xlwt.Workbook()
ws = wb.add_sheet('Primera hoja')
ws.write(0, 0, 'Columna A')
ws.write(0, 1, 'Columna B')
i = 1
for x, y in zip(list1, list2):
    print i
    # con zip recorro las 2
    # listas a la vez
    ws.write(i, 0, x)
    ws.write(i, 1, y)
    i += 1
    wb.save('datos.xls')

El código anterior creará un archivo con el nombre datos.xls. Este archivo tendrá dos columnas con los datos de las listas que se definen en el código.

Ahora procedemos a leer el archivo. Esto es muy sencillo con la librería xlwr. Primero importamos y leemos el arhivo.

import xlrd

book = xlrd.open_workbook('datos.xls')
sh = book.sheet_by_index(0) # Indicamos la primera hoja

Ahora podemos llamar ha funciones como las siguientes:

 sh.nrows # número de filas
 sh.ncols # número de columnas
 sh.cell_value(rowx=1, colx=1) # Seleccionamos una celda
 sh.col_values(0) # Seleccionamos la primera columna
 sh.col_values(1) # Seleccionamos la segunda columna
 sh.row_values(0) # Seleccionamos la primera fila

El resultado de la ejecución de las ordenes anteriores sobre el archivo datos.xls, creado anteriormente, es el siguiente:

6
2
a
[u'Columna A', 1.0, 2.0, 3.0, 4.0, 5.0]
[u'Columna B', u'a', u'b', u'c', u'd', u'e']
[u'Columna A', u'Columna B']

Para más documentación visitar la página oficial de CSV y xlwr/xlrd