کتابخانه xlrd در پایتون
کتابخانه xlrd یکی از ابزارهای قدیمی و کاربردی در زبان برنامهنویسی پایتون است که برای خواندن دادهها از فایلهای Excel با فرمت .xls طراحی شده است. در گذشته، این کتابخانه از فرمت .xlsx نیز پشتیبانی میکرد، اما از نسخه ۲ به بعد، این قابلیت حذف شده و اکنون فقط فایلهای .xls (نسخههای قدیمی اکسل) را پشتیبانی میکند.
در این آموزش، با نحوه نصب، استفاده، محدودیتها و جایگزینهای مدرن xlrd آشنا میشویم و بهترین شیوهها برای کار با دادههای اکسل در پایتون را بررسی میکنیم.
فهرست مطالب
- نصب کتابخانه xlrd
- ایجاد و بارگذاری فایل Excel
- خواندن دادهها از Sheetها
- دسترسی به سلولها و ردیفها
- مدیریت دادهها و تبدیل آنها
- خطاهای رایج و نحوه رفع آنها
- مقایسه xlrd با سایر کتابخانهها
- جمعبندی بهترین روشها
۱. نصب کتابخانه xlrd
برای نصب کتابخانه xlrd از دستور زیر استفاده کنید:
pip install xlrdاگر از نسخههای جدیدتر پایتون و فایلهای .xlsx استفاده میکنید، توجه داشته باشید که xlrd دیگر از این فرمت پشتیبانی نمیکند. برای خواندن فایلهای جدیدتر Excel باید از کتابخانه openpyxl یا pandas استفاده نمایید.
۲. باز کردن فایل Excel
اولین گام در استفاده از xlrd، باز کردن فایل Excel است. در مثال زیر نحوه بارگذاری یک فایل و دسترسی به محتوای آن را مشاهده میکنید:
import xlrd
# باز کردن فایل اکسل
workbook = xlrd.open_workbook('data.xls')
# مشاهده نام شیتها
print(workbook.sheet_names())
در این مثال، با استفاده از تابع open_workbook() فایل اکسل باز میشود و سپس با sheet_names() نام تمام شیتهای موجود در فایل نمایش داده میشود.
۳. دسترسی به شیتها (Sheets)
هر فایل اکسل میتواند چندین شیت داشته باشد. برای دسترسی به یک شیت خاص از نام یا شماره ایندکس آن استفاده میکنیم.
# دسترسی به شیت از طریق نام
sheet = workbook.sheet_by_name('Sheet1')
# یا با استفاده از ایندکس
sheet = workbook.sheet_by_index(0)
# چاپ تعداد ردیفها و ستونها
print(sheet.nrows, sheet.ncols)
متغیر sheet اکنون شامل دادههای شیت انتخابی است. ویژگیهای nrows و ncols به ترتیب تعداد ردیفها و ستونها را نشان میدهند.
۴. خواندن داده از سلولها و ردیفها
برای خواندن مقدار یک سلول خاص از متد cell_value() استفاده میکنیم.
# خواندن مقدار سلول
value = sheet.cell_value(0, 0)
print(value)
کد بالا مقدار سلول در ردیف ۰ و ستون ۰ را برمیگرداند. توجه کنید که شمارش از صفر شروع میشود.
خواندن همه مقادیر از یک ردیف یا ستون
# خواندن یک ردیف کامل
row_values = sheet.row_values(1)
# خواندن یک ستون کامل
col_values = sheet.col_values(0)
print(row_values)
print(col_values)
تابع row_values() تمام مقادیر موجود در ردیف مشخصشده را برمیگرداند، و col_values() دادههای یک ستون خاص را بازمیگرداند.
حلقه برای خواندن تمام دادهها
for i in range(sheet.nrows):
row = sheet.row_values(i)
print(row)
با استفاده از این حلقه میتوان کل دادههای شیت را ردیف به ردیف خواند. این روش برای فایلهای با حجم متوسط مناسب است.
۵. پردازش دادهها و تبدیل به ساختارهای پایتونی
دادههای استخراجشده با xlrd معمولاً در قالب لیست از لیستها نمایش داده میشوند. برای تحلیل دادهها بهتر است آنها را به ساختارهایی مانند dictionary یا DataFrame تبدیل کنیم.
تبدیل به لیست از دیکشنریها
data = []
header = sheet.row_values(0)
for i in range(1, sheet.nrows):
row = sheet.row_values(i)
record = dict(zip(header, row))
data.append(record)
print(data[:5])
در این کد، ردیف اول به عنوان عنوان ستونها (header) در نظر گرفته میشود و سپس هر ردیف بعدی به یک دیکشنری تبدیل میشود. نتیجه یک لیست از دیکشنریهاست که خواندن آن برای توسعهدهندگان آسانتر است.
۶. خطاهای رایج و راهحلها
| خطا | علت | راهحل |
|---|---|---|
| Unsupported format, or corrupt file | فایل از نوع .xlsx است و xlrd از آن پشتیبانی نمیکند. | از openpyxl یا pandas برای خواندن فایل استفاده کنید. |
| FileNotFoundError | مسیر فایل نادرست است یا فایل وجود ندارد. | بررسی کنید مسیر فایل به درستی وارد شده باشد. |
| IndexError: list index out of range | دسترسی به سلولی خارج از محدوده ردیفها یا ستونها. | تعداد ردیفها و ستونها را با nrows و ncols بررسی کنید. |
۷. جایگزینهای مدرن برای xlrd
با توجه به محدودیتهای جدید xlrd، بسیاری از توسعهدهندگان از کتابخانههای مدرنتر برای کار با فایلهای اکسل استفاده میکنند. در جدول زیر مقایسهای بین کتابخانههای محبوب پایتون ارائه شده است:
| کتابخانه | پشتیبانی از .xls | پشتیبانی از .xlsx | نوشتن در فایل | سرعت |
|---|---|---|---|---|
| xlrd | ✔️ | ❌ | ❌ | متوسط |
| openpyxl | ❌ | ✔️ | ✔️ | خوب |
| pandas | ✔️ | ✔️ | ✔️ | بسیار سریع |
به طور کلی، اگر با دادههای بزرگ یا فایلهای .xlsx کار میکنید، کتابخانه pandas یا openpyxl گزینههای بسیار بهتری هستند.
مثال جایگزینی با pandas
import pandas as pd
df = pd.read_excel('data.xlsx')
print(df.head())
در این روش، تنها با چند خط کد میتوان کل دادهها را در قالب DataFrame بارگذاری کرد و عملیات فیلتر، گروهبندی و تحلیل را انجام داد.
۸. نکات و بهترین شیوهها
- اگر فایل شما با نسخه جدید Excel ایجاد شده، از
openpyxlاستفاده کنید. - برای تحلیل دادهها، ترکیب xlrd با pandas میتواند کارآمد باشد.
- از مدیریت استثناها (try/except) برای جلوگیری از توقف ناگهانی برنامه استفاده کنید.
- برای فایلهای حجیم، از روشهای خواندن مرحلهای (chunk reading) بهره بگیرید.
- قبل از پردازش داده، نوع دادهها (string، number، date) را بررسی کنید تا از بروز خطا جلوگیری شود.
نمونه کامل خواندن داده از فایل Excel با xlrd
import xlrd
try:
workbook = xlrd.open_workbook('data.xls')
sheet = workbook.sheet_by_index(0)
for i in range(1, sheet.nrows):
name = sheet.cell_value(i, 0)
score = sheet.cell_value(i, 1)
print(f"Name: {name}, Score: {score}")
except FileNotFoundError:
print("فایل یافت نشد. مسیر را بررسی کنید.")
except xlrd.XLRDError as e:
print("خطا در خواندن فایل:", e)
در این مثال از ساختار try/except برای کنترل خطاهای احتمالی استفاده شده است که یکی از بهترین شیوههای برنامهنویسی ایمن در پایتون محسوب میشود.
نتیجهگیری
کتابخانه xlrd ابزاری ساده و مؤثر برای خواندن فایلهای قدیمی Excel است، اما به دلیل توقف پشتیبانی از فرمتهای جدید، استفاده از آن تنها برای پروژههای خاص و فایلهای .xls پیشنهاد میشود. برای کارهای مدرنتر، کتابخانههای openpyxl و pandas گزینههای قدرتمندتر و بهروزتری هستند.
آیا این مطلب برای شما مفید بود ؟




