2012-09-03 430 views
21

Actualmente estoy usando pandas para leer un archivo de Excel y presentar sus nombres de hoja para el usuario, para que pueda seleccionar la hoja que le gustaría usar. El problema es que los archivos son realmente grandes (70 columnas x 65k filas), tomando hasta 14 segundos para cargar en una computadora portátil (los mismos datos en un archivo CSV toman 3s).¿Cómo obtener los nombres de las hojas de los archivos XLS sin cargar todo el archivo?

Mi código de la panda es la siguiente:

xls = pandas.ExcelFile(path) 
sheets = xls.sheet_names 

me trataron XLRD antes, pero obtuvieron resultados similares. Esta fue mi código con XLRD:

xls = xlrd.open_workbook(path) 
sheets = xls.sheet_names 

Por lo tanto, puede alguien sugerir una manera más rápida para recuperar los nombres de las hojas de un archivo de Excel que leer todo el archivo?

+0

¿Cuánto tiempo se tarda en abrir un archivo de este tipo en Excel directamente? –

+0

@DocBrown Acerca de 4 si Excel ya está abierto (Excel Starter 2010) – pcarvalho

Respuesta

28

puede usar la biblioteca xlrd y abrir el libro de trabajo con el indicador "on_demand = True", para que las hojas no se carguen automáticamente.

de lo que puede recuperar los nombres de las hojas de una manera similar a los pandas:

import xlrd 
xls = xlrd.open_workbook(r'<path_to_your_excel_file>', on_demand=True) 
print xls.sheet_names() # <- remeber: xlrd sheet_names is a function, not a property 
+0

la documentación xlrd dice que esto solo funciona con BIFF> = 5.0. No funciona para mí, y si pregunto xls.biff_version dice "0", lo que parece extraño (¿imposible?). ¿Alguna idea de lo que puede estar pasando? – famargar

4

Como pandas utiliza xlrd para la lectura de las hojas de Excel y pasa todos los argumentos de palabras clave de pandas.ExcelFile a xlrd.open_workbook, pd.ExcelFile acepta la bandera on_demand así . Por lo tanto, no es necesario cargar xlrd por separado:

xls = pandas.ExcelFile(path, on_demand = True) 
sheets = xls.sheet_names 
Cuestiones relacionadas