पायथन ( CSV फ़ाइलें नहीं) के साथ एक्सेल (XLS) फ़ाइलों को पढ़ने का सबसे अच्छा तरीका क्या है ।
क्या कोई अंतर्निहित पैकेज है जो इस कार्य को करने के लिए पायथन में डिफ़ॉल्ट रूप से समर्थित है?
पायथन ( CSV फ़ाइलें नहीं) के साथ एक्सेल (XLS) फ़ाइलों को पढ़ने का सबसे अच्छा तरीका क्या है ।
क्या कोई अंतर्निहित पैकेज है जो इस कार्य को करने के लिए पायथन में डिफ़ॉल्ट रूप से समर्थित है?
जवाबों:
मैं फ़ाइलों को पढ़ने के लिए अत्यधिक सलाह देता हूं.xls
।
voyager ने COM स्वचालन के उपयोग का उल्लेख किया है। कुछ साल पहले खुद ऐसा करने के बाद, चेतावनी दी जाती है कि ऐसा करना एक वास्तविक PITA है। कैविट्स की संख्या बहुत बड़ी है और प्रलेखन में कमी और कष्टप्रद है। मैं कई अजीब कीड़े और गोच में भाग गया, जिनमें से कुछ को पता लगाने में कई घंटे लग गए।
अद्यतन: नई .xlsx
फ़ाइलों के लिए, पढ़ने और लिखने के लिए अनुशंसित लाइब्रेरी ओपनपीक्सल प्रतीत होती है (धन्यवाद, इकर पोहोरस्की)।
पांडा का उपयोग करना:
import pandas as pd
xls = pd.ExcelFile("yourfilename.xls")
sheetX = xls.parse(2) #2 is the sheet number
var1 = sheetX['ColumnName']
print(var1[1]) #1 is the row number...
आप उनमें से किसी एक को चुन सकते हैं http://www.python-excel.org/
मैं अजगर xlrd लाइब्रेरी की सिफारिश करूंगा।
इसका उपयोग कर स्थापित करें
pip install xlrd
आयात का उपयोग कर
import xlrd
कार्यपुस्तिका खोलने के लिए
workbook = xlrd.open_workbook('your_file_name.xlsx')
नाम से खुली चादर
worksheet = workbook.sheet_by_name('Name of the Sheet')
सूचकांक द्वारा खुली शीट
worksheet = workbook.sheet_by_index(0)
सेल मान पढ़ें
worksheet.cell(0, 0).value
मुझे लगता है कि पंडों का जाना सबसे अच्छा तरीका है। समारोह का उपयोग करते हुए पंडों के साथ यहां पहले से ही एक उत्तर हैExcelFile
, लेकिन यह मेरे लिए ठीक से काम नहीं करता था। से यहां मैंने पाया read_excel
समारोह जो सिर्फ ठीक काम करता है:
import pandas as pd
dfs = pd.read_excel("your_file_name.xlsx", sheet_name="your_sheet_name")
print(dfs.head(10))
PS आपको कार्य करने के xlrd
लिए read_excel
फ़ंक्शन को स्थापित करने की आवश्यकता है
21-03-2020 अपडेट करें: जैसा कि आप यहां देख सकते हैं , xlrd
इंजन के साथ समस्याएं हैं और यह अपग्रेड होने जा रहा है। openpyxl
सबसे अच्छा प्रतिस्थापन है। तो यहाँ वर्णित है , विहित वाक्यविन्यास होना चाहिए:
dfs = pd.read_excel("your_file_name.xlsx", sheet_name="your_sheet_name", engine="openpyxl")
Xlsx के लिए मुझे पहले दिए गए समाधान पसंद हैं जैसे कि https://web.archive.org/web/20180216070531//programming/4371163/reading-xlsx-files-use-python । मैं मानक पुस्तकालय से ही मॉड्यूल का उपयोग करता हूं।
def xlsx(fname):
import zipfile
from xml.etree.ElementTree import iterparse
z = zipfile.ZipFile(fname)
strings = [el.text for e, el in iterparse(z.open('xl/sharedStrings.xml')) if el.tag.endswith('}t')]
rows = []
row = {}
value = ''
for e, el in iterparse(z.open('xl/worksheets/sheet1.xml')):
if el.tag.endswith('}v'): # Example: <v>84</v>
value = el.text
if el.tag.endswith('}c'): # Example: <c r="A3" t="s"><v>84</v></c>
if el.attrib.get('t') == 's':
value = strings[int(value)]
letter = el.attrib['r'] # Example: AZ22
while letter[-1].isdigit():
letter = letter[:-1]
row[letter] = value
value = ''
if el.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
जोड़े गए सुधार शीट नाम से सामग्री ला रहे हैं, कॉलम प्राप्त करने के लिए फिर से उपयोग कर रहे हैं और साझाकरण का उपयोग किया जाता है।
def xlsx(fname,sheet):
import zipfile
from xml.etree.ElementTree import iterparse
import re
z = zipfile.ZipFile(fname)
if 'xl/sharedStrings.xml' in z.namelist():
# Get shared strings
strings = [element.text for event, element
in iterparse(z.open('xl/sharedStrings.xml'))
if element.tag.endswith('}t')]
sheetdict = { element.attrib['name']:element.attrib['sheetId'] for event,element in iterparse(z.open('xl/workbook.xml'))
if element.tag.endswith('}sheet') }
rows = []
row = {}
value = ''
if sheet in sheets:
sheetfile = 'xl/worksheets/sheet'+sheets[sheet]+'.xml'
#print(sheet,sheetfile)
for event, element in iterparse(z.open(sheetfile)):
# get value or index to shared strings
if element.tag.endswith('}v') or element.tag.endswith('}t'):
value = element.text
# If value is a shared string, use value as an index
if element.tag.endswith('}c'):
if element.attrib.get('t') == 's':
value = strings[int(value)]
# split the row/col information so that the row leter(s) can be separate
letter = re.sub('\d','',element.attrib['r'])
row[letter] = value
value = ''
if element.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
आप यहां सूचीबद्ध किसी भी लाइब्रेरी का उपयोग कर सकते हैं (जैसे कि Pyxlreader जो कि JExcelApi, या xlwt पर आधारित है ), प्लस COM स्वचालन फ़ाइलों के पढ़ने के लिए स्वयं एक्सेल का उपयोग करने के लिए , लेकिन इसके लिए आप अपने सॉफ़्टवेयर की निर्भरता के रूप में Office का परिचय दे रहे हैं, जो हमेशा एक विकल्प नहीं हो सकता है।
xlwt
WriTes फाइलें; xlrd
ReaD फ़ाइलों का उपयोग करें।
यदि आपको पुराने XLS प्रारूप की आवश्यकता है। Ansii 'cp1251' के लिए कोड नीचे।
import xlrd
file=u'C:/Landau/task/6200.xlsx'
try:
book = xlrd.open_workbook(file,encoding_override="cp1251")
except:
book = xlrd.open_workbook(file)
print("The number of worksheets is {0}".format(book.nsheets))
print("Worksheet name(s): {0}".format(book.sheet_names()))
sh = book.sheet_by_index(0)
print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
print("Cell D30 is {0}".format(sh.cell_value(rowx=29, colx=3)))
for rx in range(sh.nrows):
print(sh.row(rx))
पायथन एक्सेलरेटर इस कार्य को भी संभालता है। http://ghantoos.org/2007/10/25/python-pyexcelerator-small-howto/
यह डेबियन और उबंटू में भी उपलब्ध है:
sudo apt-get install python-excelerator
आप (गैर-अजगर) प्रोग्राम xls2csv चलाने पर भी विचार कर सकते हैं। इसे एक xls फ़ाइल फ़ीड करें, और आपको एक सीएसवी वापस प्राप्त करना चाहिए।
xls2csv
, फिर csv
पायथन से?
पुरानी Excel फ़ाइलों के लिए OleFileIO_PL मॉड्यूल है जो उपयोग किए गए OLE संरचित संग्रहण प्रारूप को पढ़ सकता है।
with open(csv_filename) as file:
data = file.read()
with open(xl_file_name, 'w') as file:
file.write(data)
आप इनबिल्ट पैकेज के साथ ऊपर की तरह एक्सेल को CSV चालू कर सकते हैं। CSV को तानाशाह और तानाशाह के एक इनबिल्ट पैकेज के साथ संभाला जा सकता है जो उसी तरह काम करेगा जैसे अजगर शब्दकोश काम करता है। जो इसे एक टन आसान बनाता है मैं वर्तमान में एक्सेल के लिए किसी भी इनबिल्ट पैकेज से अनजान हूं लेकिन मैं ओपनपीक्सएल में आया था। यह भी बहुत सीधे आगे और सरल था आप नीचे कोड स्निपेट देख सकते हैं आशा है कि यह मदद करता है
import openpyxl
book = openpyxl.load_workbook(filename)
sheet = book.active
result =sheet['AP2']
print(result.value)