উত্তর:
আমি ফাইলগুলি পড়ার জন্য এক্সএলআরডিকে অত্যন্ত সুপারিশ করি .xls
।
ভয়েজার সিওএম অটোমেশন ব্যবহারের কথা উল্লেখ করেছিলেন। কয়েক বছর আগে নিজেই এই কাজটি করার পরে, সতর্ক হোন যে এটি করা সত্যিকারের পিআইটিএ। সাবধানতার সংখ্যা বিশাল এবং ডকুমেন্টেশনের অভাব এবং বিরক্তিজনক। আমি অনেকগুলি অদ্ভুত বাগ এবং গোটচেগুলিতে ছুটলাম, যার মধ্যে বেশিরভাগ সময় বের করতে বেশ কয়েক ঘন্টা সময় লেগেছিল।
আপডেট: নতুন .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/
আমি পাইথন এক্সএলআরডি গ্রন্থাগারটি সুপারিশ করব।
এটি ব্যবহার করে ইনস্টল করুন
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))
পিএস আপনার কাজ করতে ফাংশনের জন্য xlrd
ইনস্টল থাকা দরকারread_excel
21-03-2020 আপডেট করুন: আপনি এখানে দেখতে পাচ্ছেন , xlrd
ইঞ্জিন নিয়ে সমস্যা রয়েছে এবং এটি অবচয় করা হতে চলেছে। openpyxl
সেরা প্রতিস্থাপন। এখানে বর্ণিত হিসাবে , প্রমিত বাক্য গঠনটি হওয়া উচিত:
dfs = pd.read_excel("your_file_name.xlsx", sheet_name="your_sheet_name", engine="openpyxl")
এক্সএলএক্সএক্সের জন্য আমি https://web.archive.org/web/20180216070531//programming/4371163/reading-xlsx-files-using-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
আপনি এখানে তালিকাভুক্ত যে কোনও লাইব্রেরি ব্যবহার করতে পারেন (যেমন পেক্সল্রেডার যা জেক্সেলএপি বা xlwt এর উপর ভিত্তি করে ), পাশাপাশি COM অটোমেশন নিজেই ফাইলগুলি পড়ার জন্য ব্যবহার করতে পারেন তবে তার জন্য আপনি অফিসটিকে আপনার সফ্টওয়্যারটির নির্ভরতা হিসাবে চালু করছেন, যা সর্বদা একটি বিকল্প হতে পারে না।
xlwt
লিখেছেন ফাইল; xlrd
রিড ফাইল ব্যবহার করুন ।
আপনার যদি পুরানো এক্সএলএস ফর্ম্যাট প্রয়োজন। 'সিপি 1251' আনসির জন্য নীচে কোড।
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 চালানোর বিষয়েও বিবেচনা করতে পারেন। এটি একটি এক্সএলএস ফাইল খাওয়ান, এবং আপনার একটি সিএসভি ফিরে পাওয়া উচিত।
xls2csv
, তারপর csv
পাইথন থেকে পার্সিং করছেন ?
পুরানো এক্সেল ফাইলগুলির জন্য রয়েছে ওলিফাইআইআইএপিএল মডিউল যা ব্যবহৃত ওএল স্ট্রাকচার্ড স্টোরেজ ফর্ম্যাটটি পড়তে পারে।
with open(csv_filename) as file:
data = file.read()
with open(xl_file_name, 'w') as file:
file.write(data)
আপনি ইনবিল্ট প্যাকেজগুলির সাথে উপরের মতো সিএসভিকে এক্সেল করতে সক্ষম করতে পারেন। সিএসভি হস্তান্তর করা যেতে পারে ডিক্রেডার এবং ডিক্টরাইটারের ইনবিল্ট প্যাকেজ যা পাইথন অভিধানে কাজ করে ঠিক তেমনভাবে কাজ করবে। এটি টনকে সহজ করে তোলে আমি বর্তমানে এক্সেলের জন্য কোনও ইনবিল্ট প্যাকেজ সম্পর্কে অসচেতন তবে আমি ওপেনপিএক্সএল জুড়ে এসেছি। এটি ছিল বেশ সোজা এগিয়ে এবং সহজ আপনি নীচের কোড স্নিপেট দেখতে পারেন আশা করি এটি সহায়তা করে
import openpyxl
book = openpyxl.load_workbook(filename)
sheet = book.active
result =sheet['AP2']
print(result.value)