خواندن فایلهای متنی
فایل را خطبهخط بخوان، خطوط دلخواه را انتخاب کن و خطاهای مسیر را مدیریت کن.
بعد از این فصل میتوانی…
- فایل متنی را با open باز کنی.
- خطها را بشماری و فیلتر کنی.
- FileNotFoundError را مدیریت کنی.
پیشنهاد برای پیشنیاز: رشتهها و پردازش متن
خواندن فایلهای متنی
ویدیوی این فصل هنوز اضافه نشده است. میتوانی همین حالا آموزش متنی و تمرینها را شروع کنی.
فایل و حافظهٔ موقت
متغیرها هنگام اجرای برنامه در حافظهاند. فایل برای نگهداری داده استفاده میشود. فایل متنی را میتوان دنبالهای از خطها در نظر گرفت؛ معمولاً پایان هر خط با نویسهٔ \n مشخص میشود.
در این درس فایل messages.txt از قبل در فضای مجازی کارگاه آماده است. این فضا فایلهای کامپیوتر تو نیست و در اجرای تازه دوباره از نمونهٔ درس ساخته میشود. در پایتون نصبشده، مسیر فایل باید روی همان دستگاه وجود داشته باشد.
باز کردن و بستن فایل
open نام فایل، حالت و encoding را میگیرد و شیء فایل برمیگرداند. حالت r برای خواندن است. with پس از تمام شدن بلوک فایل را میبندد؛ این روش از جا ماندن فایل باز جلوگیری میکند.
حالت w برای نوشتن است و محتوای قبلی فایل را پاک میکند؛ برای تمرین خواندن از r استفاده کن. encoding="utf-8" برای فایلهای UTF-8 شامل متن فارسی مناسب است.
خواندن همهٔ متن
with open("messages.txt", "r", encoding="utf-8") as handle:
text = handle.read()
print(text.splitlines()[0])خروجی مورد انتظار
From: sara@example.org
پیمایش و شمارش خطها
حلقهٔ for روی فایل هر بار یک خط را میدهد. شمارنده را پیش از حلقه صفر کن و در هر دور یک واحد زیاد کن. خط خالی هم یک خط محسوب میشود.
read() تمام محتوای باقیمانده را یکجا میخواند؛ برای فایل بزرگ، پیمایش خطبهخط حافظهٔ کمتری نیاز دارد. پس از رسیدن به انتها، برای خواندن دوباره میتوان فایل را دوباره باز کرد.
تعداد خطها
count = 0
with open("messages.txt", encoding="utf-8") as handle:
for line in handle:
count += 1
print(count)خروجی مورد انتظار
6
فیلتر و مسئلهٔ خط خالی اضافه
خط خواندهشده معمولاً \n دارد و print هم یک پایان خط اضافه میکند. rstrip() فاصلههای انتهایی را حذف میکند؛ rstrip("\n") فقط پایان خط را حذف میکند.
با startswith خطهای دارای پیشوند دلخواه را انتخاب کن. با in میتوان بخشی از متن را در هر جای خط جستوجو کرد و با continue خطهای نامناسب را کنار گذاشت.
انتخاب فرستندهها
with open("messages.txt", encoding="utf-8") as handle:
for line in handle:
if not line.startswith("From:"):
continue
print(line.rstrip("\n"))خروجی مورد انتظار
From: sara@example.org From: ali@example.org
فایل پیدا نشد
اگر نام یا مسیر اشتباه باشد، open خطای FileNotFoundError میدهد. میتوان نام فایل را از input گرفت و این خطا را با try / except مدیریت کرد.
پیام قابل فهم برای مسیر اشتباه
try:
with open("missing.txt", encoding="utf-8") as handle:
print(handle.read())
except FileNotFoundError:
print("فایل پیدا نشد")خروجی مورد انتظار
فایل پیدا نشد
تعداد موضوعها
فایل messages.txt را بخوان و فقط خطهایی را بشمار که با Subject: شروع میشوند. نتیجه باید ۲ باشد.
یک راهنمای کوچک
درون حلقه از line.startswith("Subject:") استفاده کن.
پاسخ پیشنهادی و خروجی
count = 0
with open("messages.txt", encoding="utf-8") as handle:
for line in handle:
if line.startswith("Subject:"):
count += 1
print(count)خروجی نمونه
2
خودآزمایی
پاسخ را انتخاب کن و دلیل آن را بخوان. این بخش برای تمرین است و نمرهٔ رسمی ثبت نمیکند.