کار با فایلها در پایتون چیست؟
در بسیاری از برنامههای واقعی لازم است اطلاعات را از فایل بخوانیم یا اطلاعات جدیدی داخل فایل ذخیره کنیم. پایتون ابزارهای ساده و قدرتمندی برای کار با فایلها در اختیار ما قرار میدهد.
به مجموعه کارهایی مانند باز کردن، خواندن، نوشتن و بستن فایلها File Handling گفته میشود.
باز کردن فایل با open()
برای باز کردن یک فایل در پایتون از تابع open() استفاده میکنیم.
file = open("data.txt", "r")
در این مثال فایل data.txt را در حالت خواندن باز کردهایم.
حالتهای مختلف باز کردن فایل
| حالت | کاربرد |
|---|---|
r |
خواندن فایل |
w |
نوشتن در فایل |
a |
اضافه کردن اطلاعات به انتهای فایل |
x |
ایجاد فایل جدید |
خواندن فایل با read()
بعد از باز کردن فایل میتوانیم محتوای آن را با
read() بخوانیم.
file = open("data.txt", "r")
content = file.read()
print(content)
file.close()
متد read() تمام محتوای فایل را میخواند.
بستن فایل با close()
بعد از پایان کار بهتر است فایل را با close() ببندیم.
file = open("data.txt", "r")
content = file.read()
print(content)
file.close()
بستن فایل باعث آزاد شدن منابعی میشود که برای باز بودن فایل استفاده شدهاند.
خواندن یک خط با readline()
اگر بخواهیم فایل را خط به خط بخوانیم، میتوانیم از
readline() استفاده کنیم.
file = open("data.txt", "r")
line1 = file.readline()
line2 = file.readline()
print(line1)
print(line2)
file.close()
هر بار اجرای readline() یک خط از فایل را میخواند.
خواندن تمام خطوط با readlines()
متد readlines() خطوط فایل را به صورت یک لیست برمیگرداند.
file = open("data.txt", "r")
lines = file.readlines()
print(lines)
file.close()
خواندن فایل با حلقه for
یک روش مناسب برای خواندن فایلهای متنی، استفاده از حلقه
for است.
file = open("data.txt", "r")
for line in file:
print(line)
file.close()
نوشتن در فایل با حالت w
با حالت w میتوانیم اطلاعاتی داخل فایل بنویسیم.
file = open("data.txt", "w")
file.write("Hello Python")
file.close()
اگر فایل وجود نداشته باشد، پایتون آن را ایجاد میکند.
اما اگر فایل از قبل وجود داشته باشد، حالت w
محتوای قبلی آن را جایگزین میکند.
نوشتن چند خط در فایل
file = open("data.txt", "w")
file.write("Python\n")
file.write("AI\n")
file.write("PythonAI\n")
file.close()
اضافه کردن اطلاعات با حالت a
اگر بخواهیم اطلاعات جدید را به انتهای فایل اضافه کنیم،
از حالت a استفاده میکنیم.
file = open("data.txt", "a")
file.write("\nHello PythonAI")
file.close()
برخلاف حالت w، حالت a محتوای قبلی فایل را پاک نمیکند.
ایجاد فایل جدید با حالت x
با حالت x میتوانیم یک فایل جدید ایجاد کنیم.
file = open("new_file.txt", "x")
file.write("This is a new file")
file.close()
اگر فایل از قبل وجود داشته باشد، استفاده از x
باعث ایجاد خطا میشود.
روش بهتر: استفاده از with open()
در برنامههای پایتون معمولاً پیشنهاد میشود برای کار با فایلها
از with open() استفاده کنیم.
with open("data.txt", "r") as file:
content = file.read()
print(content)
در این روش نیازی نیست خودمان close() را صدا بزنیم.
پایتون بعد از پایان بلوک with فایل را میبندد.
نوشتن فایل با with open()
with open("data.txt", "w") as file:
file.write("Python is easy!")
اضافه کردن اطلاعات با with open()
with open("data.txt", "a") as file:
file.write("\nLearning Python")
خواندن فایل با encoding
هنگام کار با فایلهای فارسی بهتر است encoding را مشخص کنیم.
یکی از رایجترین گزینهها utf-8 است.
with open("data.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
نوشتن متن فارسی در فایل
text = "سلام، به PythonAI خوش آمدید."
with open("message.txt", "w", encoding="utf-8") as file:
file.write(text)
بررسی وجود فایل
برای بررسی وجود فایل میتوانیم از ماژول os استفاده کنیم.
import os
if os.path.exists("data.txt"):
print("فایل وجود دارد")
else:
print("فایل وجود ندارد")
مدیریت خطای FileNotFoundError
اگر بخواهیم فایلی را باز کنیم که وجود ندارد، ممکن است
FileNotFoundError ایجاد شود.
try:
with open("data.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("فایل پیدا نشد")
همانطور که در درس مدیریت خطاها یاد گرفتیم، میتوانیم این Exception را مدیریت کنیم.
مثال کاربردی: ذخیره نام کاربران
فرض کنید میخواهیم نام کاربر را دریافت کرده و در یک فایل ذخیره کنیم:
name = input("نام شما چیست؟ ")
with open("users.txt", "a", encoding="utf-8") as file:
file.write(name + "\n")
print("نام شما ذخیره شد.")
در این مثال هر نام جدید به انتهای فایل اضافه میشود و اطلاعات قبلی از بین نمیرود.
مثال کاربردی: خواندن نام کاربران
with open("users.txt", "r", encoding="utf-8") as file:
for name in file:
print(name.strip())
متد strip() برای حذف فاصلهها و کاراکتر خط جدید
از ابتدا و انتهای متن استفاده شده است.
تفاوت حالتهای r، w و a
| حالت | خواندن | نوشتن | محتوای قبلی |
|---|---|---|---|
r |
بله | خیر | حفظ میشود |
w |
خیر | بله | جایگزین میشود |
a |
خیر | بله | حفظ میشود |
نکته مهم
وقتی از w استفاده میکنیم باید مراقب باشیم؛
اگر فایل از قبل وجود داشته باشد، اطلاعات قبلی آن جایگزین میشود.
اگر فقط میخواهیم اطلاعات جدید اضافه کنیم، معمولاً حالت
a انتخاب مناسبتری است.
خلاصه درس
| دستور یا متد | کاربرد |
|---|---|
open() |
باز کردن فایل |
read() |
خواندن محتوای فایل |
readline() |
خواندن یک خط |
readlines() |
خواندن خطوط به صورت لیست |
write() |
نوشتن در فایل |
close() |
بستن فایل |
with open() |
کار ایمنتر و سادهتر با فایل |
سؤالات متداول
برای باز کردن فایل در پایتون از چه دستوری استفاده میکنیم؟
از تابع open() استفاده میکنیم.
تفاوت w و a چیست؟
حالت w محتوای قبلی فایل را جایگزین میکند،
اما حالت a اطلاعات جدید را به انتهای فایل اضافه میکند.
آیا باید بعد از کار با فایل از close() استفاده کنیم؟
اگر فایل را با open() معمولی باز کرده باشیم،
بهتر است بعد از پایان کار آن را با close() ببندیم.
استفاده از with open() باعث میشود بستن فایل به صورت
خودکار انجام شود.
چرا هنگام کار با متن فارسی از encoding="utf-8" استفاده میکنیم؟
مشخص کردن UTF-8 کمک میکند متنهای فارسی و سایر کاراکترهای Unicode به شکل صحیح خوانده و ذخیره شوند.
جمعبندی
کار با فایلها یکی از مهارتهای مهم پایتون است.
با یادگیری open()، حالتهای مختلف فایل،
read()، write() و
with open() میتوانیم اطلاعات را در فایلها
ذخیره و بازیابی کنیم.