2012-09-03 18 views
21

मैं वर्तमान में एक्सेल फ़ाइल पढ़ने के लिए पांडा का उपयोग कर रहा हूं और उपयोगकर्ता को अपने शीट नाम प्रस्तुत कर रहा हूं, इसलिए वह चुन सकता है कि वह किस शीट का उपयोग करना चाहेंगे। समस्या यह है कि फाइलें वास्तव में बड़ी हैं (70 कॉलम x 65k पंक्तियां), नोटबुक पर लोड करने के लिए 14s तक लेना (सीएसवी फ़ाइल में एक ही डेटा 3 एस ले रहा है)।पूरी फ़ाइल लोड किए बिना एक्सएलएस फ़ाइलों से शीट नाम कैसे प्राप्त करें?

पांडा में मेरे कोड इस प्रकार है:

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

मैंने पहले xlrd कोशिश की, लेकिन इसी तरह के परिणाम प्राप्त की।

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

तो, किसी को भी पूरी फ़ाइल को पढ़ने से Excel फ़ाइल से पत्रक के नाम को पुनः प्राप्त करने का एक तेज़ तरीका सुझाव है कि कर सकते हैं: यह xlrd के साथ मेरे कोड था?

+0

कितना समय लगता है सीधे Excel में इस तरह के एक फ़ाइल को खोलने के लिए ले करता है? –

+0

@DocBrown 4s के बारे में अगर एक्सेल अगर पहले से ही खुला है (एक्सेल स्टार्टर 2010) – pcarvalho

उत्तर

28

आप xlrd लाइब्रेरी का उपयोग कर सकते हैं और "on_demand = True" ध्वज के साथ कार्यपुस्तिका खोल सकते हैं, ताकि चादरें स्वचालित रूप से लोड नहीं होंगी।

से आप पांडा के लिए एक समान तरीके से पत्रक के नाम प्राप्त कर सकते हैं:

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

xlrd दस्तावेज कहता है कि यह केवल BIFF> = 5.0 के साथ काम करता है। यह मेरे लिए काम नहीं करता है, और यदि मैं xls.biff_version से पूछता हूं तो यह कहता है "0" जो अजीब लगता है (असंभव?)। कोई विचार क्या हो रहा है? – famargar

4

pandas के रूप में एक्सेल शीट को पढ़ने के लिए xlrd उपयोग करता है और pandas.ExcelFile से xlrd.open_workbook करने के लिए सभी कीवर्ड तर्क गुजरता है, pd.ExcelFile रूप में अच्छी तरह on_demand ध्वज को स्वीकार करता है । इसलिए, यह अलग से xlrd लोड करने के लिए आवश्यक नहीं है:

xls = pandas.ExcelFile(path, on_demand = True) 
sheets = xls.sheet_names 
संबंधित मुद्दे

 संबंधित मुद्दे