Tengo dificultades para leer un valor de celda particular de Excel en xlrd. Cualquier valor que estoy leyendo (valor de fecha) se convierte a un número. Sé que hay soluciones para convertirlo en formato de fecha python, pero ¿puedo leer directamente el valor de la cadena en xlrd?Python xlrd leer como cadena
Respuesta
xlrd NO convierte las fechas en flotar. Excel almacena las fechas como flotantes.
Citando the xlrd documentation (desplazarse hacia abajo una página):
fechas en hojas de cálculo Excel
En realidad, no hay tales cosas. Lo que tienes son números flotantes números y esperanza piadosa. Hay varios problemas con las fechas de Excel:
(1) Las fechas no se almacenan como un tipo de datos independiente; se almacenan como números de punto flotantes y debe confiar en (a) el "formato de número" aplicado a ellos en Excel y/o (b) saber qué celdas se supone que tienen fechas en ellas. Este módulo ayuda con (a) por inspeccionando el formato que ha sido aplicado a cada celda numérica; si el parece ser un formato de fecha, la celda se clasifica como una fecha en lugar de un número .
Consulte también la sección sobre la clase Cell y los diversos métodos de hoja que extraen el tipo de celda (texto, número, fecha, booleano, etc.).
Lea también el tutorial al que puede acceder desde www.python-excel.org
Me pregunto cómo sabe Excel cuando las celdas deben interpretarse como fechas: parece que xlrd está forzado a adivinar. – nobar
@nobar: Excel tiene exactamente la misma información disponible que xlrd. Ambos se basan en la introspección del "formato numérico. –
En realidad, los archivos Excel almacenan un tipo de celda además del valor de cada celda. Cada tipo se almacena como un entero, al que se puede acceder en xlrd con sheet.cell_type (rowNumber, columnNumber). 0 está en blanco, 1 es texto, 2 es un número, 3 es una fecha. – Brian
así, como usted dice:
# reading from a xls file (no .xlsx files, no writing!)
import xlrd # install xlrd from http://pypi.python.org/pypi/xlrd
wb = xlrd.open_workbook("YOUR_FILE.xls") # xls file to read from
sh1 = wb.sheet_by_index(0) # first sheet in workbook
sh2 = wb.sheet_by_name('colors') # sheet called colors
# print all rows in first sheet
print "content of", sh1.name # name of sheet
for rownum in range(sh1.nrows): # sh1.nrows -> number of rows (ncols -> num columns)
print sh1.row_values(rownum)
# rowx and colx (x for Excel) start at 1!
print "row3 col 2:", sh1.cell(rowx=3,colx=2).value
col = sh1.col_values(0) # column 0 as a list of string or numbers
print '"A" column content:' # python index 0, 1.colunm, called A
for cell in col: print cell
print sh1.col_values(1) # 2. column, note mix of string (header) and numbers!
Para este ejemplo el XLS es:
hoja 1: lista
name latitude longitude status color date
Mount Hood 45.3736 121.6925 active red 01-ene-01
Mount Jefferson 44.6744 121.7978 dormant yellow 23-sep-05
Three-Fingered 44.478 121.8442 extinct green
Mount Washington 4.3325 121.8372 extinct green
South Sister 44.1036 121.7681 active red
Diamond Peak 43.5206 122.1486 extinct green
Mount Thielsen 43.1531 122.0658 extinct green
Mount Scott 42.923 122.0163 dormant yellow
Mount McLoughlin 2.445 122.3142 dormant yellow
hoja 2: colores
status color
active red
dormant yellow
extinct green
Cuando hago un sh1.row_values (rownum) obtengo una lista con los valores ya convertidos a coma flotante. – Rnet
Excel almacena las fechas como números tanto int ernally y en archivos .xls y luego los formatea adecuadamente cuando se muestran. Por lo tanto, si los lee ingenuamente con xlrd, obtendrá números o cadenas. Lo que debe hacer es verificar qué tipo de celda es y luego convertir el número usted mismo. Ya sea usando las funciones integradas xlrd, como xldate_as_tuple()
, o su propia función.
Consulte this question para obtener más información.
- 1. Leer el objeto del archivo como una cadena en python
- 2. Python xlrd: suprimir mensajes de advertencia
- 3. Lectura de datos numéricos de Excel como texto usando xlrd en Python
- 4. Python Cadena getattr como una cadena
- 5. ¿Cómo detectar si una celda está vacía al leer archivos de Excel utilizando la biblioteca xlrd?
- 6. ¿Cómo leo un archivo de Excel en Python usando xlrd? ¿Puede leer los formatos de Office más nuevos?
- 7. Django y xlrd, leyendo de memoria
- 8. formato de cadena NodeJS como Python?
- 9. Como leer más rápido BufferedReader
- 10. python xlrd recibiendo flotación desde la celda de texto de Excel
- 11. Python, importe una cadena de código Python como módulo
- 12. Lectura de archivos de Excel con xlrd
- 13. Mostrar la cadena escapada como Unicode en Python
- 14. Python leer multilínea JSON
- 15. Leer cadena línea por línea
- 16. Leer cadena XML usando StAX
- 17. Archivo de Python Leer + Escribir
- 18. Como leer request.getInputStream() varias veces
- 19. Leer archivo enorme en Python
- 20. Unicode a UTF8 para archivos CSV - Python a través de xlrd
- 21. Leer MP3 en Python 3
- 22. Leer/escribir archivos en Python
- 23. Python Excel (xlrd, xlwt) - Cómo copiar un estilo desde una celda y ponerlo en otro
- 24. Obteniendo llamadas al sistema Python como resultado de cadena
- 25. La cadena de Python se imprime como [u'String ']
- 26. clase de cadena Python como StringBuilder en C#?
- 27. Usando Python, ¿cómo puedo leer/escribir datos en la memoria como lo haría con un archivo?
- 28. Python Guardar como archivo
- 29. Leer imagen Datos XMP en Python
- 30. Cómo leer/dev/random en python
Así funciona Excel. Lamentablemente, Excel almacena muchos valores como números. Proporcione los detalles del valor de celda que está leyendo en XLRD. Imprima el tipo de celda en particular y lo incluyó en su pregunta. –