ویژگی تصویر

کتابخانه xlrd در پایتون

  /  پایتون   /  کتابخانه 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 گزینه‌های قدرتمندتر و به‌روزتری هستند.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: