2012-09-03 8 views
21

Obecnie używam pand, aby odczytać plik Excela i przedstawić jego nazwy arkuszy użytkownikowi, aby mógł wybrać arkusz, którego chciałby użyć. Problem polega na tym, że pliki są naprawdę duże (70 kolumn x 65 tys. Wierszy), co zajmuje 14 do załadowania na notebooka (te same dane w pliku CSV trwają 3 sekundy).Jak uzyskać nazwy arkuszy z plików XLS bez ładowania całego pliku?

Mój kod w panda idzie tak:

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

Próbowałem xlrd wcześniej, ale uzyskano podobne wyniki. To był mój kod z xlrd:

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

Więc może ktoś sugerują szybszą drogę do pobierania nazwy arkuszy z pliku Excel niż czyta cały plik?

+0

Ile czasu zajmuje otwarcie takiego pliku bezpośrednio w programie Excel? –

+0

@DocBrown Około 4s, jeśli Excel, jeśli jest już otwarty (Excel Starter 2010) – pcarvalho

Odpowiedz

28

można użyć biblioteki xlrd i otworzyć skoroszyt z flagą "on_demand = True", aby arkusze nie zostały załadowane automatycznie.

niż można pobrać nazwy arkuszy w sposób podobny do pand:

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

Dokumentacja Xlrd mówi, że działa tylko z BIFF> = 5.0. To nie działa dla mnie, a jeśli zapytam xls.biff_version, mówi "0", co wydaje się dziwne (niemożliwe?). Masz pojęcie, co może się wydarzyć? – famargar

4

Jak pandas wykorzystuje xlrd odczytu arkuszy Excel i przekazuje wszystkie argumenty słów kluczowych z pandas.ExcelFile do xlrd.open_workbook, pd.ExcelFile akceptuje flagę on_demand także . Dlatego nie jest konieczne osobne ładowanie xlrd:

xls = pandas.ExcelFile(path, on_demand = True) 
sheets = xls.sheet_names 
Powiązane problemy