2012-09-03 5 views
21

Ich benutze derzeit Pandas, um eine Excel-Datei zu lesen und ihre Blattnamen dem Benutzer zu präsentieren, damit er auswählen kann, welches Blatt er verwenden möchte. Das Problem ist, dass die Dateien sehr groß sind (70 Spalten x 65k Zeilen), was bis zu 14 Sekunden dauert, um auf ein Notebook geladen zu werden (die gleichen Daten in einer CSV-Datei benötigen 3 Sekunden).Wie erhalten Sie Blattnamen aus XLS-Dateien, ohne die gesamte Datei zu laden?

Mein Code in Panda geht so:

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

Ich versuchte xlrd vor;, aber ähnliche Ergebnisse. Dies war mein Code mit xlrd:

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

So kann jeder einen schnelleren Weg schlägt die Blattnamen aus einer Excel-Datei als die Lesen Sie die gesamte Datei abrufen?

+0

Wie lange dauert es, direkt eine solche Datei in Excel zu öffnen? –

+0

@DocBrown Etwa 4s, wenn Excel, wenn bereits geöffnet (Excel Starter 2010) – pcarvalho

Antwort

28

Sie können die Bibliothek xlrd verwenden und die Arbeitsmappe mit dem Flag "on_demand = True" öffnen, damit die Blätter nicht automatisch geladen werden.

als Sie die Blattnamen in ähnlicher Weise wie Pandas abrufen können:

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

die Xlrd-Dokumentation sagt, das funktioniert nur mit BIFF> = 5.0. Es funktioniert nicht für mich, und wenn ich xls.biff_version frage, steht "0", was merkwürdig erscheint (unmöglich?). Irgendeine Idee, was passieren könnte? – famargar

4

Als pandas verwendet xlrd zum Lesen von Excel-Sheets und übergibt alle Keyword-Argumente von pandas.ExcelFile zu xlrd.open_workbook akzeptiert pd.ExcelFile die on_demand Flagge sowie . Daher ist es nicht notwendig, xlrd separat zu laden:

xls = pandas.ExcelFile(path, on_demand = True) 
sheets = xls.sheet_names 
Verwandte Themen