2012-09-03 39 views
21

Tôi hiện đang sử dụng gấu trúc để đọc tệp Excel và hiển thị tên trang tính cho người dùng, vì vậy, anh ấy có thể chọn trang tính mà anh ấy muốn sử dụng. Vấn đề là các tập tin thực sự lớn (70 cột x 65k hàng), chiếm đến 14s để tải trên một máy tính xách tay (cùng một dữ liệu trong một tập tin CSV đang dùng 3s).Cách lấy tên trang tính từ tệp XLS mà không tải toàn bộ tệp?

Mã của tôi trong panda đi như thế này:

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

tôi đã cố gắng xlrd trước đó, nhưng thu được kết quả tương tự. Đây là mã của tôi với xlrd:

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

Vì vậy, ai cũng có thể gợi ý cách nhanh hơn để truy xuất tên trang tính từ tệp Excel hơn đọc toàn bộ tệp?

+0

Mất bao lâu để mở tệp đó trong Excel một cách trực tiếp? –

+0

@DocBrown Khoảng 4s nếu Excel nếu đã mở (Excel Starter 2010) – pcarvalho

Trả lời

28

bạn có thể sử dụng thư viện xlrd và mở sổ làm việc với cờ "on_demand = True" để các trang tính không được tải tự động.

hơn bạn có thể lấy tên sheet trong một cách tương tự như gấu trúc:

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

tài liệu xlrd cho biết điều này chỉ hoạt động với BIFF> = 5.0. Nó không làm việc cho tôi, và nếu tôi hỏi xls.biff_version nó nói "0" mà có vẻ lạ (không thể?). Bất kỳ ý tưởng gì có thể xảy ra? – famargar

4

Như pandas sử dụng xlrd cho việc đọc tờ Excel và vượt qua tất cả đối số từ khóa từ pandas.ExcelFile để xlrd.open_workbook, pd.ExcelFile chấp nhận on_demand cờ cũng . Do đó, không cần phải tải riêng xlrd:

xls = pandas.ExcelFile(path, on_demand = True) 
sheets = xls.sheet_names 
Các vấn đề liên quan