2010-07-13 20 views
51

मैं एक फ़ाइल कैसे खोलूं जो कि पायथन में पढ़ने के लिए एक्सेल फ़ाइल है?मैं पायथन में एक्सेल फ़ाइल कैसे खोल सकता हूं?

मैंने पाठ फ़ाइलों को खोला है, उदाहरण के लिए, पढ़ने के आदेश के साथ sometextfile.txt। मैं एक्सेल फ़ाइल के लिए ऐसा कैसे करूं?

+1

कौन सा Excel के संस्करण? यदि आप ईसेल 2007 या 2010 द्वारा बनाई गई एक्सेल फ़ाइलों को खोलने के लिए स्वयं को सीमित कर सकते हैं, तो आपको अधिक या सभी फ़ाइल को XML के रूप में पार्स करने में सक्षम होना चाहिए। –

+0

आईटी का एक्सेल 2003 :( – novak

उत्तर

14

यह एक सादा पाठ फ़ाइल खोलने के रूप में सीधा नहीं है और इसे कुछ प्रकार के बाहरी मॉड्यूल की आवश्यकता होगी क्योंकि ऐसा करने के लिए कुछ भी नहीं बनाया गया है। यहाँ कुछ विकल्प हैं:

http://docs.python.org/library/csv.html

:

http://www.python-excel.org/

संभव हो तो, आप एक CSV फ़ाइल के रूप में एक्सेल स्प्रेडशीट निर्यात करने और फिर इसे पढ़ने के लिए निर्मित अजगर सीएसवी मॉड्यूल का उपयोग कर विचार कर सकते हैं

+0

ठीक है, मैं वास्तव में सीएसवी सामग्री को समझ नहीं पा रहा हूं कि मेरे पास एक सीएसवी मॉड्यूल के रूप में मेरी एक्सेल फ़ाइल को कैसे खोलें? मेरे पास एक ऐसा प्रोग्राम है जो मैं txt फ़ाइलों के लिए चाहता हूं और मैं इसे करना चाहता हूं इस एक्सेल फ़ाइल के लिए वही बात ... जो जाने का सबसे अच्छा तरीका है? क्या आप इस पर विस्तृत जानकारी दे सकते हैं? – novak

+0

या तो आप किसी तृतीय पक्ष पायथन मॉड्यूल का उपयोग xlrd जैसे कर सकते हैं, या अपनी एक्सेल फ़ाइल को एक सामान्य एक्सेल फ़ाइल के बजाय एक CSV फ़ाइल सहेज सकते हैं। मुझे लगता है कि आप जिस बिंदु को याद कर रहे हैं वह यह है कि एक एक्सेल फ़ाइल में सादा पाठ फ़ाइल के समान नहीं है। नोटपैड में एक्सेल दस्तावेज़ खोलें और आप देखेंगे कि मेरा क्या मतलब है। आपको या तो फ़ाइल को सादे-पाठ प्रारूप में सहेजने की आवश्यकता है जैसे सीएसवी (अल्पविराम से अलग मूल्य), जो कि पाइथन के साथ पढ़ना आसान है, या एक तृतीय पक्ष मॉड्यूल स्थापित करें और उपयोग करें जो आपके लिए एक्सेल फ़ाइल को पार्स कर सकता है। –

+0

मेरी समस्या यह है कि फ़ाइल वास्तव में वास्तव में बड़ी है। अगर मैं फ़ाइल को पूरी तरह से खोल नहीं सकता तो मैं फ़ाइल को CSV प्रारूप के रूप में कैसे सहेज सकता हूं? – novak

28

the xlrd library आज़माएं।

[संपादित करें] - जो मैं आपकी टिप्पणी से देख सकता हूं, नीचे स्निपेट की तरह कुछ चाल चल सकता है। मैं यहां मान रहा हूं कि आप 'जॉन' शब्द के लिए सिर्फ एक कॉलम खोज रहे हैं, लेकिन आप इसे और अधिक जोड़ सकते हैं या इसे अधिक सामान्य कार्य में बना सकते हैं।

from xlrd import open_workbook 

book = open_workbook('simple.xls',on_demand=True) 
for name in book.sheet_names(): 
    if name.endswith('2'): 
     sheet = book.sheet_by_name(name) 

     # Attempt to find a matching row (search the first column for 'john') 
     rowIndex = -1 
     for cell in sheet.col(0): # 
      if 'john' in cell.value: 
       break 

     # If we found the row, print it 
     if row != -1: 
      cells = sheet.row(row) 
      for cell in cells: 
       print cell.value 

     book.unload_sheet(name) 
+0

मुझे लगता है कि यह ऐसा हो सकता है जो मैं करना चाहता हूं: xlrd आयात से open_workbook पुस्तक = open_workbook (' simple.xls 'book.sheet_names() में, on_demand = सच) नाम के लिए: अगर name.endswith (' 2 '): चादर = book.sheet_by_name (नाम) प्रिंट sheet.cell_value (0,0) book.unload_sheet (नाम) big_files.py लेकिन मैं नहीं चाहता कि यह अंत में उपयोग करे, मैं चाहता हूं कि यह उन रेखाओं को ढूंढें और मुद्रित करें जिनमें कणिका नाम हो ... जैसे कि मैं इसे विशाल एक्सेल शीट की रेखा मुद्रित करना चाहता हूं जॉन का डेटा है और बॉब नहीं है। मदद? – novak

+0

मेरा सुझाव है कि आप इसे एक अलग प्रश्न के रूप में पोस्ट करें और कोड को कोड ब्लॉक में रखें। –

+0

यह संबंधित प्रश्नों की श्रृंखला का दूसरा प्रश्न है; तीसरे प्रश्न में यह पता चला है कि असली एक्सेल फ़ाइल कथित तौर पर 1.5 जीबी है और कंप्यूटर की मेमोरी को "पर्याप्त नहीं" के रूप में वर्णित किया गया है ... देखें http://stackoverflow.com/questions/3241039/how-do-i- एक्स्ट्रा-विशिष्ट-लाइन-ऑफ-डेटा-ए-विशाल-एक्सेल-शीट-उपयोग-पायथन –

53

आप के रूप में अच्छी pandas package उपयोग कर सकते हैं ....

आप एकाधिक पत्रक के साथ फ़ाइल एक Excel के साथ काम कर रहे हैं, तो आप उपयोग कर सकते हैं:

import pandas as pd 
xl = pd.ExcelFile(path + filename) 
xl.sheet_names 

>>> [u'Sheet1', u'Sheet2', u'Sheet3'] 

df = xl.parse("Sheet1") 
df.head() 

df.head() पहले 5 पंक्तियों प्रिंट होगा आपकी एक्सेल फ़ाइल

यदि आप एकल शीट के साथ एक्सेल फ़ाइल के साथ काम कर रहे हैं, तो आप बस इसका उपयोग कर सकते हैं:

import pandas as pd 
df = pd.read_excel(path + filename) 
print df.head() 
+2

कई चादरों के साथ काम करते समय यह आदर्श है। –

+2

यह समाधान मेरा अपवर्तनीय हो जाता है। openpyxl के साथ, मैं निम्न समस्या में चल रहा हूं "InvalidFileException: openpyxl पुरानी .xls फ़ाइल प्रारूप का समर्थन नहीं करता है, कृपया इस फ़ाइल को पढ़ने के लिए xlrd का उपयोग करें, या इसे हालिया .xlsx फ़ाइल स्वरूप में कनवर्ट करें"। दूसरी ओर पांडा दोनों .xls और .xlsx फ़ाइलों को संभालती है ... भी, एक संपूर्ण तालिका को पढ़ने से कोड की केवल एक पंक्ति होती है। – nathanielng

+3

एक्सेल फ़ाइलों को पढ़ने के लिए आपको वैकल्पिक निर्भरता ['xlrd'] (https://pypi.python.org/pypi/xlrd) स्थापित करने की आवश्यकता होगी, और [' xlwt'] (https://pypi.python.org/ pypi/xlwt) एक्सेल फ़ाइलों को लिखने के लिए। – Flimm

5

प्रलेखन वहाँ openpxyl पैकेज है:

>>> from openpyxl import load_workbook 
>>> wb2 = load_workbook('test.xlsx') 
>>> print wb2.get_sheet_names() 
['Sheet2', 'New Title', 'Sheet1'] 

>>> worksheet1 = wb2['Sheet1'] # one way to load a worksheet 
>>> worksheet2 = wb2.get_sheet_by_name('Sheet2') # another way to load a worksheet 
>>> print(worksheet1['D18'].value) 
3 
>>> for row in worksheet1.iter_rows(): 
>>>  print row[0].value() 
-3
import pandas as pd 
import os 
files = os.listdir('path/to/files/directory/') 
desiredFile = files[i] 
filePath = 'path/to/files/directory/%s' 
Ofile = filePath % desiredFile 
xls_import = pd.read_csv(Ofile) 

अब आप पांडा DataFrames की शक्ति का उपयोग कर सकते हैं!

+1

प्रश्न एक्सेल फ़ाइल पढ़ने के बारे में है, न कि अल्पविराम से अलग टेक्स्ट फ़ाइल। प्रतीत होता है कि पांडों के लिए एक कार्य है ('pandas.read_excel')। – Bart

-1

यह कोड मेरे लिए पाइथन 3.5.2 के साथ काम करता है। यह खुलता है और बचाता है और एक्सेल करता है। मैं वर्तमान में फ़ाइल में डेटा को बचाने के लिए पर काम कर रहा हूँ, लेकिन इस कोड है:

import csv 
excel = csv.writer(open("file1.csv", "wb")) 

 

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