Kahibaro
Discord Login Register

10.2 خواندن فایل‌های متنی

کار با فایل متنی در پایتون

در این بخش تمرکز ما فقط روی خواندن فایل‌های متنی است؛ یعنی فایل‌هایی که از حروف، اعداد و کاراکترهای معمولی تشکیل شده‌اند (مثل .txt).

باز کردن فایل برای خواندن (`open` با حالت `"r"`)

برای خواندن یک فایل متنی، ابتدا باید آن را با تابع open باز کنید. برای خواندن، از حالت "r" (مخفف read) استفاده می‌کنیم.

ساختار کلی:

$$
\text{file\_object} = \text{open}("filename.txt", "r", encoding="utf-8")
$$

مثال:

file = open("note.txt", "r", encoding="utf-8")
# ... اینجا فایل را می‌خوانیم ...
file.close()

فراموش نکنید بعد از اتمام کار، close() را صدا بزنید تا فایل بسته شود.

خواندن کل محتوای فایل با `read()`

ساده‌ترین روش، استفاده از متد read() است که تمام محتوای فایل را یک‌جا به شما می‌دهد.

file = open("note.txt", "r", encoding="utf-8")
content = file.read()
file.close()
print(content)

تعیین حداکثر کاراکتر برای خواندن

می‌توانید به read() عدد بدهید تا حداکثر آن تعداد کاراکتر خوانده شود:

file = open("note.txt", "r", encoding="utf-8")
part = file.read(10)   # حداکثر ۱۰ کاراکتر
file.close()
print(part)

هر بار که read() را صدا می‌زنید، ادامهٔ فایل خوانده می‌شود، نه از اول:

file = open("note.txt", "r", encoding="utf-8")
first_part = file.read(5)
second_part = file.read(5)
file.close()
print("قسمت اول:", first_part)
print("قسمت دوم:", second_part)

خواندن خط‌به‌خط با `readline()`

اگر فایل شما چندین خط دارد، گاهی می‌خواهید هر بار یک خط بخوانید. متد readline() این کار را انجام می‌دهد.

file = open("note.txt", "r", encoding="utf-8")
line1 = file.readline()
line2 = file.readline()
file.close()
print("خط اول:", line1)
print("خط دوم:", line2)

نکات مهم:

خواندن همهٔ خطوط با حلقه و `readline()`

file = open("note.txt", "r", encoding="utf-8")
while True:
    line = file.readline()
    if line == "":   # یعنی به انتهای فایل رسیده‌ایم
        break
    print("یک خط:", line)
file.close()

خواندن همهٔ خطوط با `readlines()`

اگر بخواهید همهٔ خطوط را یک‌باره بگیرید، می‌توانید از readlines() استفاده کنید. خروجی این متد یک لیست از رشته‌ها است که هر عنصر آن یک خط است.

file = open("note.txt", "r", encoding="utf-8")
lines = file.readlines()
file.close()
print(lines)

اگر فایل مثلاً ۳ خط داشته باشد، چیزی شبیه این می‌گیرید:

['salam\n', 'in yek matn ast\n', 'khat sevvom\n']

پیمایش خطوط با حلقه روی `readlines()`

file = open("note.txt", "r", encoding="utf-8")
lines = file.readlines()
file.close()
for line in lines:
    print("خط:", line)

خواندن خط‌به‌خط با حلقه `for` روی شیء فایل

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

file = open("note.txt", "r", encoding="utf-8")
for line in file:
    print("خط:", line)
file.close()

این کار از نظر حافظه بهتر از read() و readlines() است، چون لازم نیست کل فایل را یک‌جا در حافظه نگه دارد.

استفاده از `with` برای باز و بستن خودکار فایل

نوشتن close() را می‌توان فراموش کرد. روش استاندارد این است که از عبارت with استفاده کنیم تا فایل به صورت خودکار بسته شود.

ساختار کلی:

with open("note.txt", "r", encoding="utf-8") as file:
    # اینجا با فایل کار می‌کنیم
    content = file.read()
# اینجا فایل خودبه‌خود بسته شده است

نمونه‌ها:

مثال ۱: خواندن کل فایل با `with` و `read()`

with open("note.txt", "r", encoding="utf-8") as file:
    content = file.read()
print(content)

مثال ۲: خواندن خط‌به‌خط با `with` و حلقه `for`

with open("note.txt", "r", encoding="utf-8") as file:
    for line in file:
        print("خط:", line)

مثال ۳: خواندن همهٔ خطوط در یک لیست با `with` و `readlines()`

with open("note.txt", "r", encoding="utf-8") as file:
    lines = file.readlines()
print(lines)

حذف کاراکتر پایان خط با `strip()`

وقتی خطوط را چاپ می‌کنید، ممکن است بین خطوط، یک خط خالی اضافی ببینید؛ چون هم در خود خط \n وجود دارد و هم تابع print خودش یک خط جدید اضافه می‌کند.

برای حذف فاصله‌ها و کاراکتر پایان خط از ابتدا و انتهای رشته از strip() استفاده می‌کنیم:

with open("note.txt", "r", encoding="utf-8") as file:
    for line in file:
        line = line.strip()   # حذف \n و فاصله‌های اضافی
        print("خط:", line)

اگر فقط بخواهید \n انتهای خط را حذف کنید، rstrip("\n") هم می‌توانید استفاده کنید:

with open("note.txt", "r", encoding="utf-8") as file:
    for line in file:
        clean_line = line.rstrip("\n")
        print("خط:", clean_line)

کار با مسیر فایل (نسبی و مطلق)

در این فصل به صورت کامل وارد مبحث مسیرها نمی‌شویم، اما برای خواندن فایل متنی لازم است فرق کلی این دو را بدانید:

مثال با مسیر نسبی:

with open("data/note.txt", "r", encoding="utf-8") as file:
    print(file.read())

مدیریت خطای «فایل پیدا نشد»

اگر نام فایل اشتباه باشد یا فایل وجود نداشته باشد، پایتون خطای FileNotFoundError می‌دهد. در فصل خطاها به‌صورت کامل با try و except کار خواهید کرد، اما اینجا یک نمونهٔ ساده مرتبط با خواندن فایل متنی:

filename = "note.txt"
try:
    with open(filename, "r", encoding="utf-8") as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("فایل", filename, "پیدا نشد.")

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

خلاصهٔ روش‌های پرکاربرد خواندن فایل متنی

    with open("note.txt", "r", encoding="utf-8") as file:
        for line in file:
            print(line.strip())

در ادامهٔ فصل، از این مهارت‌ها برای نوشتن برنامه‌های ساده‌ای استفاده می‌کنید که اطلاعات را از فایل متنی می‌خوانند و پردازش می‌کنند.

Views: 26

Comments

Please login to add a comment.

Don't have an account? Register now!