Kahibaro
Discord Login Register

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

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

در این بخش تمرکز ما فقط روی خواندن فایل‌های متنی است؛ یعنی فایل‌هایی که از حروف، اعداد و کاراکترهای معمولی تشکیل شده‌اند (مثل .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: 5

Comments

Please login to add a comment.

Don't have an account? Register now!