Table of Contents
کار با فایل متنی در پایتون
در این بخش تمرکز ما فقط روی خواندن فایلهای متنی است؛ یعنی فایلهایی که از حروف، اعداد و کاراکترهای معمولی تشکیل شدهاند (مثل .txt).
باز کردن فایل برای خواندن (`open` با حالت `"r"`)
برای خواندن یک فایل متنی، ابتدا باید آن را با تابع open باز کنید. برای خواندن، از حالت "r" (مخفف read) استفاده میکنیم.
ساختار کلی:
$$
\text{file\_object} = \text{open}("filename.txt", "r", encoding="utf-8")
$$
- آرگومان اول: نام یا مسیر فایل (مثلاً
"note.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)- متغیر
contentیک رشته (str) است که محتوای کامل فایل را در خود دارد. - اگر فایل خیلی بزرگ باشد،
read()میتواند حافظه زیادی مصرف کند؛ پس این روش برای فایلهای کوچک مناسبتر است.
تعیین حداکثر کاراکتر برای خواندن
میتوانید به 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()یک خط برمیگرداند. - در انتهای هر خط، اغلب یک کاراکتر پایان خط
\nوجود دارد. - وقتی به انتهای فایل برسید،
readline()یک رشتهٔ خالی""برمیگرداند.
خواندن همهٔ خطوط با حلقه و `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']- هر عنصر این لیست خودش یک رشته است.
- در انتهای بیشتر عناصر
\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)کار با مسیر فایل (نسبی و مطلق)
در این فصل به صورت کامل وارد مبحث مسیرها نمیشویم، اما برای خواندن فایل متنی لازم است فرق کلی این دو را بدانید:
- نام سادهٔ فایل مثل
"note.txt"یعنی فایل در همان پوشهای است که اسکریپت پایتون شما در آن اجرا میشود. - مسیر نسبی: نسبت به محل فعلی برنامه، مثلاً:
"data/note.txt""../note.txt"- مسیر مطلق: آدرس کامل، مانند:
- ویندوز:
"C:/Users/Ali/Documents/note.txt" - لینوکس/macOS:
"/home/ali/note.txt"
مثال با مسیر نسبی:
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, "پیدا نشد.")این کار باعث میشود برنامه شما بهخاطر پیدا نکردن فایل، متوقف نشود و بتواند پیام مناسبی نشان دهد.
خلاصهٔ روشهای پرکاربرد خواندن فایل متنی
read()- خواندن کل محتوا به صورت یک رشته.
- مناسب برای فایلهای کوچک.
read(size)- خواندن حداکثر
sizeکاراکتر در هر بار. readline()- خواندن یک خط در هر بار.
- مناسب وقتی خودتان ساختار حلقه را کنترل میکنید.
readlines()- خواندن همهٔ خطوط در یک لیست از رشتهها.
- حلقه
forروی شیء فایل - خواندن خطبهخط، کارآمد و ساده:
with open("note.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip())در ادامهٔ فصل، از این مهارتها برای نوشتن برنامههای سادهای استفاده میکنید که اطلاعات را از فایل متنی میخوانند و پردازش میکنند.