مقدمه

به فصل «فایل‌ها و استثناها» خوش آمدید. یکی از کارهای بنیادی در بسیاری از برنامه‌ها، خواندن اطلاعات از فایل‌ها و نوشتن اطلاعات در آنهاست. پایتون ابزارهای بسیار ساده و قدرتمندی برای کار با فایل‌های متنی فراهم می‌کند. در این درس، ما بر روی خواندن محتوای یک فایل تمرکز خواهیم کرد.

برای شروع، یک فایل متنی ساده به نام pi_digits.txt در همان پوشه‌ای که برنامه پایتون شما قرار دارد، ایجاد کنید و محتوای زیر را در آن قرار دهید:

Copy Icon pi_digits.txt
3.1415926535
8979323846
2643383279

خواندن یک فایل به صورت کامل

برای خواندن یک فایل در پایتون، ابتدا باید آن را با استفاده از تابع داخلی open() باز کنیم. این تابع مسیر فایل را گرفته و یک شیء فایل (file object) برمی‌گرداند. سپس، می‌توانیم از متد read() روی این شیء برای خواندن کل محتوای فایل در قالب یک رشته واحد استفاده کنیم.

استفاده از ساختار with برای کار با فایل‌ها بهترین روش است. این ساختار تضمین می‌کند که فایل پس از اتمام کار، به صورت خودکار بسته می‌شود، حتی اگر در حین کار با آن خطایی رخ دهد.

Copy Icon PYTHON
with open('pi_digits.txt') as file_object:
    contents = file_object.read()
print(contents)

در این کد، open('pi_digits.txt') فایل را باز کرده و یک شیء فایل برمی‌گرداند که ما آن را در متغیر file_object قرار می‌دهیم. کلمه کلیدی with مسئولیت بستن فایل را پس از خروج از این بلوک بر عهده می‌گیرد. سپس، متد read() کل محتوای فایل را خوانده و در متغیر contents ذخیره می‌کند.

اگر خروجی را مشاهده کنید، ممکن است متوجه یک خط خالی اضافی در انتهای آن شوید. این خط خالی به این دلیل ظاهر می‌شود که متد read() در انتهای فایل به کاراکتر newline می‌رسد و آن را نیز به عنوان بخشی از رشته برمی‌گرداند. برای حذف آن، می‌توانیم از متد rstrip() استفاده کنیم.

پیمایش خط به خط روی فایل

اگر بخواهیم محتوای یک فایل را به صورت خط به خط بررسی کنیم، می‌توانیم روی شیء فایل در یک حلقه for پیمایش کنیم. این روش بسیار کارآمد است، زیرا به جای خواندن کل فایل در حافظه، هر بار تنها یک خط را می‌خواند.

Copy Icon PYTHON
filename = 'pi_digits.txt'

with open(filename) as file_object:
    for line in file_object:
        print(line.rstrip())

این کد همان خروجی قبلی را تولید می‌کند، اما به روشی متفاوت. حلقه for هر خط از فایل را در متغیر line قرار می‌دهد. ما از rstrip() برای حذف کاراکتر newline اضافی که در انتهای هر خط وجود دارد، استفاده می‌کنیم تا از ایجاد خطوط خالی اضافی در خروجی جلوگیری کنیم.

ساخت یک لیست از خطوط فایل

پس از باز کردن یک فایل، می‌توانید از متد readlines() برای خواندن تمام خطوط فایل و ذخیره آنها در یک لیست استفاده کنید. این کار به شما اجازه می‌دهد تا پس از خروج از بلوک with، همچنان به محتوای فایل دسترسی داشته باشید.

Copy Icon PYTHON
filename = 'pi_digits.txt'

with open(filename) as file_object:
    lines = file_object.readlines()

for line in lines:
    print(line.rstrip())

متد readlines() هر خط از فایل را به عنوان یک عنصر مجزا در لیست lines ذخیره می‌کند. سپس ما می‌توانیم خارج از بلوک with روی این لیست حلقه زده و با آن کار کنیم. این روش برای پردازش‌های بعدی روی محتوای فایل بسیار مفید است.

در این درس، با روش‌های اصلی برای خواندن داده‌ها از فایل‌های متنی در پایتون آشنا شدیم. دیدیم که چگونه می‌توان با استفاده از open() و ساختار with، به صورت ایمن فایل‌ها را باز کرده و محتوای آنها را به صورت کامل یا خط به خط بخوانیم. در درس بعدی، به سراغ «نوشتن در یک فایل» خواهیم رفت و یاد می‌گیریم که چگونه داده‌های خود را در فایل‌های جدید یا موجود ذخیره کنیم.