2011-04-18 13 views
9

के रूप में पढ़ा गया है मुझे xlrd में Excel से किसी विशेष सेल मान को पढ़ने में कठिनाई हो रही है। जो भी मूल्य मैं पढ़ रहा हूं (दिनांक मान) किसी संख्या में परिवर्तित हो रहा है। मुझे पता है कि इसे एक पायथन दिनांक प्रारूप में बदलने के लिए समाधान हैं, लेकिन क्या मैं सीधे xlrd में स्ट्रिंग मान पढ़ सकता हूं?पायथन xlrd स्ट्रिंग

+2

से एक्सेस कर सकते हैं, इस तरह एक्सेल काम करता है। अफसोस की बात है, एक्सेल द्वारा संख्याओं के रूप में कई मान संग्रहीत किए जाते हैं। कृपया एक्सएलआरडी में पढ़ रहे सेल वैल्यू का ब्योरा दें। सेल प्रकार को विशेष रूप से प्रिंट करें और इसे अपने प्रश्न में शामिल करें। –

उत्तर

8

xlrd तारीखों को फ्लोट में परिवर्तित नहीं करता है। एक्सेल स्टोर फ्लोट के रूप में तारीखों।

(पृष्ठ नीचे स्क्रॉल) the xlrd documentation से हवाला देते हुए: एक्सेल स्प्रेडशीट

हकीकत में में

तिथियाँ, ऐसी कोई बातें हैं। आपके पास फ्लोटिंग पॉइंट नंबर और पवित्र आशा है। एक्सेल तिथियों के साथ कई समस्याएं हैं:

(1) तिथियां अलग डेटा प्रकार के रूप में संग्रहीत नहीं हैं; उन्हें बिंदु संख्याओं के रूप में संग्रहीत किया जाता है और आपको पर एक्सेल और/या (बी) पर लागू "संख्या प्रारूप" पर भरोसा करना पड़ता है, यह जानने के लिए कि कोशिकाओं को में दिनांक होने चाहिए। यह मॉड्यूल द्वारा को प्रत्येक नंबर सेल पर लागू प्रारूप का निरीक्षण करने में सहायता करता है; यदि यह एक दिनांक प्रारूप प्रतीत होता है, तो सेल को संख्या के बजाय दिनांक के रूप में वर्गीकृत किया गया है।

सेल क्लास पर अनुभाग और विभिन्न शीट विधियों को भी देखें जो सेल (टेक्स्ट, संख्या, दिनांक, बूलियन इत्यादि) के प्रकार को निकालें।

यह भी ट्यूटोरियल पढ़ें कि आप www.python-excel.org

+0

मुझे आश्चर्य है कि एक्सेल कैसे जानता है जब कोशिकाओं को तिथियों के रूप में व्याख्या किया जाना चाहिए - ऐसा प्रतीत होता है कि xlrd को अनुमान लगाने के लिए मजबूर होना पड़ता है। – nobar

+0

@ नोबार: एक्सेल में वही जानकारी है जो xlrd करता है। दोनों "संख्या प्रारूप –

+4

पर आत्मनिरीक्षण पर भरोसा करते हैं, वास्तव में, एक्सेल फाइलें प्रत्येक सेल मान के अतिरिक्त एक सेल प्रकार संग्रहीत करती हैं। प्रत्येक प्रकार को पूर्णांक के रूप में संग्रहीत किया जाता है, जिसे आप xlrd में शीट.cell_type (rowNumber, columnNumber) के साथ एक्सेस कर सकते हैं। 0 खाली है, 1 टेक्स्ट है, 2 एक संख्या है, 3 एक तिथि है। – Brian

5

अच्छी तरह से, जैसा कि आप कहते हैं:

चादर 1: लिस्टिंग

name   latitude longitude status color date 
Mount Hood  45.3736 121.6925 active red  01-ene-01 
Mount Jefferson 44.6744 121.7978 dormant yellow 23-sep-05 
Three-Fingered 44.478 121.8442 extinct green 
Mount Washington 4.3325 121.8372 extinct green 
South Sister 44.1036 121.7681 active red 
Diamond Peak 43.5206 122.1486 extinct green 
Mount Thielsen 43.1531 122.0658 extinct green 
Mount Scott  42.923 122.0163 dormant yellow 
Mount McLoughlin 2.445 122.3142 dormant yellow 

चादर 2:

# reading from a xls file (no .xlsx files, no writing!) 
import xlrd # install xlrd from http://pypi.python.org/pypi/xlrd 

wb = xlrd.open_workbook("YOUR_FILE.xls") # xls file to read from 
sh1 = wb.sheet_by_index(0) # first sheet in workbook 
sh2 = wb.sheet_by_name('colors') # sheet called colors 

# print all rows in first sheet 
print "content of", sh1.name # name of sheet 
for rownum in range(sh1.nrows): # sh1.nrows -> number of rows (ncols -> num columns) 
    print sh1.row_values(rownum) 

# rowx and colx (x for Excel) start at 1! 
print "row3 col 2:", sh1.cell(rowx=3,colx=2).value 

col = sh1.col_values(0) # column 0 as a list of string or numbers 
print '"A" column content:' # python index 0, 1.colunm, called A 
for cell in col: print cell 
print sh1.col_values(1) # 2. column, note mix of string (header) and numbers! 
इस उदाहरण XLS है के लिए

रंग

status color 
active red 
dormant yellow 
extinct green 
+0

जब मैं sh1.row_values ​​(rownum) करता हूं तो मुझे पहले से ही फ़्लोटिंग पॉइंट में परिवर्तित मानों के साथ सूची मिल रही है। – Rnet

4

एक्सेल स्टोर int दोनों संख्याओं के रूप में तारीखों ernally और .xls फ़ाइलों में और फिर प्रदर्शित करते समय तदनुसार उन्हें स्वरूपित करता है। इस प्रकार, यदि आप xlrd के साथ उन्हें naively पढ़ते हैं, तो आपको या तो संख्या या तार मिलेंगे। आपको क्या करना चाहिए यह जांचना है कि सेल का प्रकार क्या है और फिर नंबर को स्वयं परिवर्तित करें। या तो xlrd के अंतर्निहित फ़ंक्शंस, जैसे कि xldate_as_tuple(), या अपने स्वयं के फ़ंक्शन का उपयोग कर।

कुछ और विवरणों के लिए this question का संदर्भ लें।

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