معمولاً از اکسل برای نگهداری دادههای ساختاریافته استفاده میکنیم. در برنامه نویسی ممکن است بخواهیم دادههایی را از این فرمت بخوانیم یا اطلاعاتی را در آن بنویسیم. در این آموزش ۳ روش برای کار با اکسل در پایتون آشنا میشویم.
فایل excel یا صفحه گسترده معمولاً با فرمت .xlsx
یا در نسخههای قدیمیتر با .xls
شناخته میشوند. برعکس فرمت .csv
، اگر این فایلها با ویرایشگرهای متنی باز کنیم، محتوای آن را نمیتوانیم ببینیم. (فقط کدهای بهمریخته میبینیم!)
در این آموزش ۳ کتابخانه معروف و با امکانات عالی را بررسی میکنم که برای کار با اکسل در پایتون استفاده میشود. اگر میخواهید با فرمت دیگری کار کنید، میتوانید آموزشهای CSV در پایتون یا کار با فایل در پایتون را ببینید.
فهرست محتوای آموزش
اکسل در پایتون
کتابخانههای مختلفی برای کار با اکسل وجود دارد. هر کدام مزایا و معایب خاص خودشان را دارند و نمیتوان «بهترین کتابخانه» را مشخص کرد. ۴ کتابخانه خوب از نظر من این موارد هستند:
- xlrd برای خواندن فایلهای اکسل
- xlwt برای نوشتن فرمت اکسل
- openpyxl برای خواندن و نوشتن اکسل در پایتون
- کتابخانه pandas برای خواندن و پردازش excel
در این آموزش نحوه کار با سه مورد اول را بررسی میکنیم. اگر میخواهید اکسل را برای اهداف داده کاوی (علم داده یا هوش مصنوعی) استفاده کنید، احتمالاً پاندا برایتان مناسبتر است.
در بخشهای خواندن اکسل در این آموزش، یک فایل آزمایشی با محتوای زیر در اختیار داریم:
خواندن اکسل با xlrd پایتون
اگر فقط میخواهید مجموعهای از دادهها را از excel در پایتون بخوانید، به نظر من، کتابخانه xlrd گزینه بسیار مناسبی برایتان خواهد بود. در ابتدا آن را نصب میکنیم:
pip install xlrd
اگر نمیدانید دستور pip
چیست یا با نحوه اجرای آن مشکل دارید، به آموزش pip پایتون مراجعه کنید.
با متد open_workbook()
فایل اکسل را باز میکنیم. این تابع یک ورودی به صورت string میگیرد که آدرس (path) فایل مورد نظر است. مقدار خروجی را در متغیری نگه میداریم.
import xlrd
wb = xlrd.open_workbook('sbzd.xlsx')
همانطور که میدانید، هر اکسل میتواند چند sheet داشته باشد. قدم بعدی، انتخاب sheet در اکسل است. دو روش برای این کار داریم:
- انتخاب با ایندکس: مثلاً
sheet_by_index(1)
دومین sheet اکسل را انتخاب میکند. (دقت کنید که شمارهگذاری از صفر شروع میشود.) - انتخاب با نام: مثلاً
sheet_by_name('scores')
صفحهای را به نام scores انتخاب میکند.
ماژولهایی که در این آموزش با آنها کار میکنیم، از sheetهای با نام فارسی نیز پشتیبانی میکنند. 🙂
در قطعه کد زیر، با روش اول، sheet اول در اکسل را با پایتون انتخاب میکنم:
sh = wb.sheet_by_index(0)
پیشنهاد: اگر قرار است اکسلهایی با ساختارهای متفاوت را پردازش کنید، از index استفاده کنید. در انتخاب sheet با نام، اگر اسم انتخابی در اکسل نباشد، با خطا مواجه میشویم. البته میتوانید با روش مدیریت خطا در پایتون آن را مدیریت کنید.
خواندن هر سلول اکسل
حالا میتوانیم با صدازدن متدهای مختلف روی متغیر sheet دادههای سلولها یا ردیفهای مورد نظرمان را بخوانیم. برای گرفتن سلول خاص از cell_value(x, y)
استفاده میکنیم. خروجی آن، مقدار سلول در سطر x و ستون y است.
متد دیگری نیز وجود دارد که سلول را به صورت شئ xlrd.sheet.Cell برمیگرداند. این شیء نوع و مقدار سلول را در خودش نگه میدارد. روش دوم قطعه کد زیر از value آن استفاده کردهام:
# Solution 1
print( sh.cell_value(1,0) )
# Solution 2
cell = sheet.cell(1,0)
print( cell.value )
برای گرفتن همه مقادیر یک سطر اکسل در پایتون از متد row(x)
استفاده میکنیم. خروجی این تابع، لیستی از اشیاء شبیه به کد بالاست. هر کدام از اعضای این لیست در پایتون یکی از ستونهای آن ردیف است.
row2 = sh.row(2)
print( row2 )
# [text:'omid', number:18.5, text:'passed']
print( row2[1].value )
# 18.5
بهطور مشابه، متد col(y)
را داریم که مقادیر موجود در ستون y را به ما برمیگرداند.
در قطعه کد زیر، به کمک یک حلقه for مقادیر ستونهای اول و دوم همه ردیفها را در خروجی چاپ میکنم. از nrows
برای گرفتن تعداد سطرها کمک گرفتهام. (بیشتر بدانید: حلقه در پایتون)
import xlrd
wb = xlrd.open_workbook('sbzd.xlsx')
sh = wb.sheet_by_index(0)
for i in range(sh.nrows):
print(f"{sh.cell_value(i, 0)}: {sh.cell_value(i, 1)}")
خروجی قطعه کد بالا چیزی شبیه به تصویر زیر میشود:
برای یادگیری فرمت دهی رشته متنی (f-string در قطعه کد بالا) میتوانید آموزش زیر را دنبال کنید:
ایجاد اکسل با xlwt در پایتون
در صورت نیاز، باید این کتابخانه را روی سیستم خود نصب کنید. روند ایجاد اکسل به این صورت است که ابتدا یک فایل میسازیم، سپس sheet را ایجاد کرده و دادهها را در آن ثبت میکنیم. نکته مهم اینکه باید حتماً در انتها، فایل را ذخیره کنیم.
در قطعه کد زیر، به کمک کتابخانه xlwt یک اکسل و sheet با پایتون ایجاد میکنم:
import xlwt
wb = xlwt.Workbook()
sh = wb.add_sheet('my data')
با متد write()
روی شیت، دادههای خود را در سلولهای مورد نظر مینویسیم. این تابع سه ورودی دارد که به ترتیب عبارتاند از:
- شماره ردیف سلول مورد نظر
- شماره ستون مورد نظر
- محتوای سلول بهصورت string
در قطعه کد زیر، اسامی موجود در لیست names را در سطرهای مختلف اکسل مینویسم. (بیشتر بیاموزید: حلقه در پایتون)
names = ['omid', 'amirreza', 'ghazal', 'mina']
for i in range(len(names)):
sh.write(i, 0, names[i])
در انتها، برای ذخیرهسازی اکسل در پایتون از متد save()
استفاده میکنیم. به عنوان ورودی، باید نام و فرمت excel را مشخص کنیم:
wb.save('names-list.xlsx')
این کتابخانه توابع بیشتری برای ویرایش اکسل با پایتون در اختیار ما میگذارد. مثلاً میتوانیم مقدار یک سلول را بازنویسی کرده یا برای نوشتن از فونت خاصی استفاده کنیم. همه توابع آن در مستندات xlwt وجود دارد.
یادآوری: شمارش ردیف و ستونهای اکسل در پایتون از صفر شروع میشود. یعنی سلول A1
برابر موقعیت (0,0)
خواهد بود.
کار با اکسل در python
کتابخانه openpyxl یک کتابخانه کاملتر است که هم برای خواندن و هم نوشتن اکسل در پایتون استفاده میشود. ابتدا باید آن را نصب کنیم:
pip install openpyxl
روند خواندن و نوشتن مشابه کتابخانههای قبلی است. یک مزیت openpyxl نسبت به دوتای دیگر این است که برای دسترسی به سلولها میتوانیم از اسامی آنها نیز استفاده کنیم. در قطعه کد زیر، مقدار ۳ سلول مختلف از شیت scores را در خروجی چاپ میکنیم:
from openpyxl import load_workbook
wb = load_workbook("sbzd.xlsx")
sh = wb['scores']
print( sh['A2'].value )
print( sh['B4'].value )
print( sh.cell(row=3, column=2) )
برای ایجاد اکسل جدید نیز میتوانیم پس از تعریف نام sheet، دیتاهای مورد نظر را به دو روش (نام سلول یا شماره سطر و ستون) تعریف کنیم. در انتها با متد save()
نتایج را در یک فایل اکسل ذخیره میکنیم:
form openpyxl import Workbook
wb = Workbook()
sh = wb.active
sh.title = "My Sheet" # sheet name
sh['A1'] = 'omid'
sh['B1'] = 'programmer'
sh['A2'] = 'Nazanin'
sh['B2'] = 'marketer'
sh.cell(row=3, column=2).value = 'Project Manager'
wb.save("sample-employee.xlsx")
بهطور مشابه میتوانیم از حلقهها و حتی سایر ساختارهای زبان برنامه نویسی پایتون در برنامه خود استفاده کنیم.
هر کدام از این کتابخانهها متناسب با نیاز برنامه شما، میتوانند کاربردی و مناسب باشند. در این آموزش سعی کردم علاوه بر آموزش استفاده از آنها، یک دید کلی نسبت به کارهایی که هر کدام میتوانند انجام دهند به شما ارائه دهم.
شما تجربهای در کار با اکسل در پایتون دارید؟ خوشحالم میشیم تجربه یا نظر خودتان را از قسمت دیدگاهها با ما و دیگران به اشتراک بذارید. 🙂
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام
من یک فایل متنی دارم که محتوی مختصات x و y بصورت لیست هستش چطور میتونم این مختصات داخل یک فایل اکسل بصورت مجزا در دو ستون ایجاد کنم. با تشکر
سلام
میتونید از یک حلقه برای پیمایش فایل متنی استفاده کنید و دیتای هر خط رو درون فایل اکسل بنویسید.
سلام
من میخوام اطلاعات رو از یک سایتی که اطلاعاتش هر روز بروز میشه بردارم و اون اطلاعات داخل جدول بیارم باید از چه کتابخانه استفاده کنم.
سلام
برای استخراج دادهها از یه سایت با پایتون باید اصطلاحاً web crawler بنویسید. متناسب با سایتتون کتابخونههای مختلفی هست. از سادهترینش که با requests و bs4 باشه تا پیشرفتهترهاش نظیر selenium
سلام.من یک کد نوشتم که محاسباتی رو انجام میده و خروجی محاسبات رو بصورت دیتا فریم روی اکسل ایجاد کردم.اما من دو تا دیتا فریم دارم که میخوام هر دو روی یک شیت ارسال بشه.مثلا دیتا فریم 1 از سطر یک شروع بشته و دیتا فریم 2 از سطر 5.لطفا راهنمائی کنید
سلام
شاید یه راه بهتر این باشه که دیتافریمها رو با هم concat کنید و بعدش نتیجهٔ نهایی در اکسل ذخیره بشه.
ممنونم.با یک راه حل درست شد
سلام و عرض ادب. بنده دوتا جدول دارم. جدول شماره یک یه جدول ساده و کوچیکه. شامل ستون های تعداد و قیمت واحد و جمع و در آخرین سطر جمع کل میباشد.
جدول شماره دو هم شامل ستون مشتری ها و جمع کل میباشد.
میخواستم هربار که به جدول یک اعدادی میدم و جمع کل بهم میده، این جمع کلو کپی کنه تو یک سلول از جدول دو و برای بار بعدی که اعداد جدیدی داخل جدول یک میزنم کپی جمع کل جدیدو تو سلول بعدی جدول دو کپی کنه نه همون سلول قبلیه. یعنی اون جمع کل قبلیو به حافظه بسپاره و بره سراغ سلول بعدی
مثلا یه دکمه باشه که با زدنش جمع کلو کپی کنه تو سلول جدول دو و جدول یکو برگردونه به حالت پیشفرض و جمع کل بعدیو کپی کنه تو سلول بعدی جدول دو
سلام
اینطور که متوجه شدم شما میخواید محاسباتی رو در لحظه داخل اکسل انجام بدید. این آموزش برای اینه که از دیتای اکسل در اسکریپت پایتونی استفاده کنید. تا جایی که اطلاع دارم هنوز زبان پایتون در اکسل پشتیبانی نمیشه (ولی به زودی قراره بشه ظاهراً)
پیشنهاد میکنم این کار رو با محاسبات سلولها یا نوشتن کدهای زبان vba داخل اکسل انجام بدید.
سلام وقتتون بخیر
من یک اکسل با دیتای آمار و اطلاعات ثبت شده برای چندین راس دام و دارم. میخوام یک کارنامه از هر دام و بدست بیارم. چطور باید ستون های اکسل و همراه با اطلاعات مربیوط به ستون ها برای هر دام فراخوانی کنم؟
سلام
متناسب با اینکه دادههاتون چطور ذخیره شدند باید تصمیم گرفت. اگه هر مجموعه داده که احتیاج دارید توی یه ردیف هست، میتونید ردیف به ردیف بخونیدشون ولی اگر ستونی هستی، شاید بهتر باشه ابتدا همهی دادهها رو بخونید و در یک ساختار ماتریسمانند قرار بدید.
برای پردازش حتماً احتیاج دارید با ساختار حلقهها کار کنید. پیشنهاد میکنم اگر آشنا نیستید جلسه حلقه از دوره جامع رو حتماً ببینید.
سلام
من با پایتون یک فایل اکسل ایجاد کردم و یه سری دیتا رو داخل این اکسل نوشتم .
اگر برنامه رو دوباره اجرا کنم
میبینم که دیتای قبلی رو پاک کرده و دیتای جدیدی که دام رو نوشته .
اما من میخوام اون قبلیا رو پاک نکنه .
درواقع میخوام دیتا رو اضافه کنه .
ممنون میشم چطور این مشکل رو حل کنم
( از اکسل به عنوان دیتابیس میخوام استفاده کنم )☕️
سلام
با چه ماژولی با اکسل کار میکنید؟ شما باید عملیات append رو روی اکسل انجام بدید. یعنی دیتای قبلی بمونه و دیتای جدید به انتهای فایل فعلی اضافه بشه.
سلام وقت بخیر.
اگر تعداد داده ها زیاد باشد و بخواهیم از پایتون فایلی به صورت اکسل ذخیره کنیم. چطور بعد از اینکه تعداد رکوردهای یک شیت تمام شد به شیت بعدی برود و ادامه کار را در شیت بعدی انجام دهد.
سلام
اگه با xlwt کار کنید، مشابه کدی که در همین آموزش هست، میتونید با متد
add_sheet()
یه شیت جدید ایجاد کنید. این متد یه شیء بر میگردونه (در مثال اسمش sh هست) که وقتی روی این شیءwrite()
رو صدا بزنید عملاً داخل شیت موردنظرتون مینویسید.به همین شکل میتونید هر زمان که بخواید یه شیت جدید ایجاد و نوشتن رو در اون ادامه بدید.
سلام . ممنونم از آموزش مفیدتون
اگر بخواهیم داده ها بر اساس یک ستون خاص (مثلا ستون دوم ) مرتب شود (بر اساس حروف الفبا ) بعد شیتهای جدیدی ایجاد کند به اسم همان سلولهای مرتب شده
مثلا در ستون دوم ، اسم افراد است ، بعد شیتهایی به اسم افراد ایجاد کند و تمام سطرهای مربوط به اون ستون را داخل شیت جدید بیاورد
سپس مجدد داخل هر شیت ، سطرها را بر اساس ستون مثلا پنجم و هفتم مرتب کند .
ممنون میشم راهنمایی کنید .
سلام
تا جایی که اطلاع دارم این ماژولها فقط امکان خوندن و نوشتن رو دارند. شما میتونید دادهها رو از داخل اکسل فراخوانی کنید. طبق نیازتون دستهبندی و مرتب کنید و بعدش داخل یک اکسل جدید بنویسید.
سلام ممنون از توضیحات شفافتون
اگر بخواهیم داده های خاصی از یک ستون رو فراخوانی کنیم چطور
مثلا یک شیت اکسل با چند ردیف و ستون داریم میخواهیم از ستون دوم( رندمی از اعداد 1 تا 12) اعداد 6 را استخراج و داده های متناظر با این عدد را درسایر سطرهای ستون های دیگر به من نشان دهد.
سلام
یه راه ساده اینه که روی تک تک ردیفهای دادههاتون حرکت کنید و مقدار ستون دلخواهتون رو بگیرید. مثلاً میتونید این مقدار رو درون یک لیست قرار بدید تا بعداً روی اونها پردازشی انجام بدید. در قطعه کد زیر من ستون دوم رو فقط پرینت کردم:
عالي بود تشكر
خوشحالیم براتون کاربردی بوده 🙂
سلام مال من این ارور رو میده : Excel xlsx file; not supported
این هم کده منه :
سلام
بهنظر در نسخه 2 این ماژول به غیر از فرمت xls فرمتهای دیگه پشتیبانی نمیشن!
یا میتونید با
pip install xlrd==1.2.0
نسخه قبلی رو نصب کنید یا از ماژولهای دیگه کمک بگیرید.ممنون. خیلی عالیه
خیلی عالی بود
خوشحالیم که براتون مفید بوده 🙂
سلام
میشه کدش رو بهم بگید ممنون میشم:
میتونیم کاری کنیم که مثلا بهش بگیم اگر چیزی که توی sheet[“A1”] نوشته شده علی بود پرینت کنه sheet[“A2”]
سلام
از ماژول xlrd برای خوندن سلولهای اکسل استفاده کنید. دقیقاً مراحل این بخش از آموزش رو که پیش ببرید مقدار هر سلولی رو میتونید بخونید.
برای اینکه بگید «اگه» از ساختار شرط if در پایتون کمک بگیرید.
سلام
در قسمت اول xlrd که باید اکسل رو باز کنیم. چطوری ادرس محل فایل رو باید بدیم ؟ چون باز نمیکنه میگخ همچین فایلی موجود نیست
سلام
هم میتونید آدرس کامل اکسل رو بدید (کلیک راست که کنید مسیر فولدره + اسم و فرمتش) یا میتونید نسبی تعریف کنید. آدرس نسبی یعنی نسبت به فایل کدی که داره اجرا میشه. مثلاً توی مثال این آموزش چون کنار هم هستن از حالت نسبی استفاده شده.
خیلی مفید و خوب بود ، ممنووون ام ….
خوشحالیم که براتون کاربردی بوده؛ مرسی که همراهمونید.
میزنه این نوع فایل رو پشتیبانی نمیکنه
با کدوم کتابخونه و چه فرمتی رو باز میکنید؟
kheili khoob va aali
merci
خوشحالیم که آموزش براتون کاربردی بوده. ممنون واسه انرژی خوبتون 🙂