2012-09-03 15 views
21

Attualmente sto usando i panda per leggere un file Excel e presentare i suoi nomi di fogli all'utente, in modo che possa selezionare il foglio che vorrebbe usare. Il problema è che i file sono veramente grandi (70 colonne x 65k righe), occupando fino a 14 secondi per caricarli su un notebook (gli stessi dati in un file CSV sono 3).Come ottenere i nomi dei fogli dai file XLS senza caricare l'intero file?

Il mio codice in panda va in questo modo:

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

ho provato XLRD prima, ma hanno ottenuto risultati simili. Questo era il mio codice con XLRD:

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

Quindi, Qualcuno può suggerire un modo più veloce per recuperare i nomi dei fogli da un file Excel che leggere l'intero file?

+0

Quanto tempo occorre per aprire direttamente un file di questo tipo in Excel? –

+0

@DocBrown A proposito di 4 se Excel se già aperto (Excel Starter 2010) – pcarvalho

risposta

28

è possibile utilizzare la libreria xlrd e aprire la cartella di lavoro con il flag "on_demand = True", in modo che i fogli non vengano caricati automaticamente.

di quanto si possa recuperare i nomi dei fogli in modo simile a panda:

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 documentazione di xlrd dice che funziona solo con BIFF> = 5.0. Non funziona per me, e se chiedo xls.biff_version dice "0" che sembra strano (impossibile?). Qualche idea su cosa potrebbe accadere? – famargar

4

Come pandas utilizza xlrd per la lettura di fogli Excel e passa tutti gli argomenti di parole chiave da pandas.ExcelFile a xlrd.open_workbook, pd.ExcelFile accetta la bandiera on_demand pure . Pertanto, non è necessario caricare separatamente :

xls = pandas.ExcelFile(path, on_demand = True) 
sheets = xls.sheet_names 
Problemi correlati