trabajar manejo leer con columnas archivos python xlrd import-from-excel

manejo - trabajar excel en python



¿Cómo leo un archivo de Excel en Python usando xlrd? ¿Puede leer los formatos de Office más nuevos? (5)

¿Tienes que usar xlrd? Acabo de descargar ''ACTUALIZACIÓN - Dow Jones Industrial Average Movers - 2008'' de ese sitio web y no tuve problemas para leerlo con pyExcelerator .

import pyExcelerator book = pyExcelerator.parse_xls(''DJIAMovers.xls'')

Mi problema está debajo, pero sería un comentario interesado de cualquier persona con experiencia con xlrd.

Acabo de encontrar xlrd y parece ser la solución perfecta, pero estoy teniendo un pequeño problema para empezar. Intento extraer datos programáticamente de un archivo de Excel que extraje de Dow Jones con los componentes actuales del promedio industrial Dow Jones (enlace: http://www.djindexes.com/mdsidx/?event=showAverages )

Cuando abro el archivo sin modificar, aparece un desagradable error BIFF (no se reconoce el formato binario)

Sin embargo, puede ver en esta captura de pantalla que Excel 2008 para Mac cree que está en formato ''Excel 1997-2004'' (captura de pantalla: http://skitch.com/alok/ssa3/componentreport-dji.xls-properties )

Si, en cambio, lo abro en Excel manualmente y lo guardo como formato ''Excel 1997-2004'' explícitamente, luego lo abriré en python usig xlrd, todo es maravilloso. Recuerde, Office cree que el archivo ya está en formato ''Excel 1997-2004''. Todos los archivos son .xls

Aquí hay un paquete de una sesión de ipython que replica el problema: http://pastie.textmate.org/private/jbawdtrvlrruh88mzueqdq

¿Alguna idea sobre: ​​cómo engañar a xlrd para que reconozca el archivo y poder extraer datos? ¿Cómo usar Python para automatizar el formato explícito ''guardar como'' a uno que xlrd aceptará? ¿Plan B?


Bueno, aquí hay un código que hice: (mira hacia abajo): aquí

No estoy seguro sobre los formatos más nuevos: si xlrd no puede leerlo, xlrd necesita tener una nueva versión.


Más información sobre pyExcelerator: Para leer un archivo, haga esto:

import pyExcelerator book = pyExcelerator.parse_xls(filename)

donde filename es una cadena que es el nombre de archivo a leer (no un objeto similar a un archivo). Esto le dará una estructura de datos que representa el libro de trabajo: una lista de pares, donde el primer elemento del par es el nombre de la hoja de trabajo y el segundo elemento es la información de la hoja de trabajo.

Los datos de la hoja de cálculo son un diccionario, donde las claves son (fila, col) pares (comenzando con 0) y los valores son los contenidos de la celda, generalmente int, float o string. Entonces, por ejemplo, en el caso simple de que todos los datos estén en la primera hoja de trabajo:

data = book[0][1] print ''Cell A1 of worksheet %s is: %s'' % (book[0][0], repr(data[(0, 0)]))

Si la celda está vacía, obtendrá un KeyError. Si está tratando con fechas, pueden (lo olvido) aparecer como enteros o flotantes; si este es el caso, necesitarás convertir. Básicamente, la regla es: datetime.datetime (1899, 12, 31) + datetime.timedelta (days = n) pero puede estar desactivada en 1 o 2 (porque Excel trata 1900 como un año bisiesto para la compatibilidad con Lotus, y porque No puedo recordar si 1900-1-1 es 0 o 1), así que haga un poco de prueba y error para verificar. Los horarios se almacenan como flotadores, creo (días y fracciones de un día).

Creo que hay un apoyo parcial para las fórmulas, pero no garantizaría nada.



FWIW, soy el autor de xlrd, y el mantenedor de xlwt (un fork de pyExcelerator). Algunos puntos:

  1. El archivo ComponentReport-DJI.xls está mal nombrado; no es un archivo XLS, es un archivo de valores separados por tabuladores. Ábrelo con un editor de texto (por ejemplo, el Bloc de notas) y verás a qué me refiero. También puedes mirar los bytes crudos no muy crudos con Python:

    >>> open(''ComponentReport-DJI.xls'', ''rb'').read(200) ''COMPANY NAME/tPRIMARY EXCHANGE/tTICKER/tSTYLE/tICB SUBSECTOR/tMARKET CAP RANGE/ tWEIGHT PCT/tUSD CLOSE/t/r/n3M Co./tNew York SE/tMMM/tN/A/tDiversified Industria ls/tBroad/t5.15676229508/t50.33/t/r/nAlcoa Inc./tNew York SE/tA''

    Puede leer este archivo usando el módulo csv de Python ... simplemente use delimiter="/t" en su llamada a csv.reader() .

  2. xlrd puede leer cualquier archivo que pyExcelerator pueda, y leerlos, las mejores fechas no aparecen como flotantes, y la historia completa en las fechas de Excel se encuentra en la documentación xlrd.

  3. pyExcelerator es abandonware-xlrd y xlwt están vivos y bien. Consulte http://groups.google.com/group/python-excel

HTH John