martes, 14 de junio de 2011

Leer datos de Excel con Python

Para mi PFC necesito leer datos directamente de ficheros Excel. He encontrado una librería que nos facilita la tarea: xlrd.

Dicha librería sólo sirve para tareas de lectura. Si queremos escribir existe otra equivalente, que en este caso se llama xlwt.

Ambas son compatibles con ficheros Excel 97, 2000, XP y 2003.

Para abrir una archivo de Excel, basta con hacer:

excel = xlrd.open_worbook("hoja.xls")

Ahora podemos seleccionar una hoja por su nombre:

hoja = excel.sheet_by_name("hoja 1")

Aunque también podríamos hacerlo por índices.

Dejo un ejemplo completo con las funciones más básicas:


import xlrd


''' Return a xlrd.sheet object with the Excel sheet information.
   
    Arguments:
    filename -- Location of Excel file.
    sheetname -- The name of the Excel page ie:"Testing".
'''
def open_xls(filename,sheetname):
    # Open the workbook
    wb = xlrd.open_workbook(filename,formatting_info=True)
   
    # Select the sheet
    sh = wb.sheet_by_name(sheetname)
   
    # Returns the sheet
    return sh


''' Returns a list of ParetoFront individuals fitness in with format
    [Obj1Fitness,Obj2Fitness].
   
    Arguments:
    sheet -- The Excel sheet returned from open_xls() function.
    iteration -- The iteration to obtain the Pareto Front.
'''
def get_pf(sheet,iteration):
    ind_fitness = list()
   
    # Iterate through rows
    for rownum in range(sheet.nrows):
        # Select only individuals in given iteration
        if sheet.cell_value(rownum,0) == iteration:
            # Save [Obj1NSGA2,Obj2NSGA2] of PF individuals
            if sheet.cell_xf_index(rownum,1) != sheet.cell_xf_index(rownum,2):
                ind_fitness.append([sheet.cell_value(rownum,5),sheet.cell_value(rownum,4)])
   
    return ind_fitness
           
   
def main():
    sheet = open_xls("BestsFinal.xls","Training")
    print get_pf(sheet,2)

    return 0

if __name__ == '__main__':
    main()

domingo, 12 de junio de 2011

Crear enlaces simbólicos en Windows

Para complementar la entrada anterior, comento como crear enlaces simbólicos en Windows (al parecer, este método sólo es válido con Windows Vista o 7).

Primero abrimos una consola de administrador (Inicio, escribimos cmd y con el botón derecho en el programa seleccionamos "Ejecutar como administrador").

A continuación podemos hacer el enlace, la sintaxis es:

mklink /D (directorio-destino) (directorio-enlazado)

Por ejemplo, ayer necesitaba que toda mi música estuviera disponible desde el directorio C:\jukloud\static\songs . Mi primera idea fue copiar todo mi directorio de música a dicha carpeta. Pero simplemente basta con hacer:

mklink /D C:\jukloud\static\songs "F:\Mi Musica"

Las comillas del último directorio son necesarias porque tiene espacios.

La única cosa a tener en cuenta es que el directorio destino NO debe existir previamente, ya que será creado como directorio simbólico con la orden mklink.

lunes, 6 de junio de 2011

Crear enlaces simbólicos en Linux

Hoy he actualizado Iceweasel (Firefox en Debian) a su versión 4. Firefox, sin embargo está en una versión anterior en los repositorios, por lo que mi idea ha sido borrar firefox y hacer un enlace simbólico a Iceweasel, consiguiendo así que cualquier programa que llamase a Firefox, llamase ahora a Iceweasel.

Para ello, la sintaxis es la siguiente:

sudo ln -s (origen) (destino)

Que en mi caso era:
 
sudo ln -s /usr/bin/iceweasel /usr/bin/firefox

Con esto creamos un enlace simbólico llamado firefox en /usr/bin, que es donde antes de desinstalarlo estaba el ejecutable de Firefox 3. Ahora al escribir firefox en consola, llamará al enlace, que a su vez ejecutará /usr/bin/iceweasel.

Nota: Si en algún momento queremos deshacer el enlace, bastará con ejecutar:

sudo unlink /usr/bin/firefox