Table of Contents
کار با فایل برای نوشتن و افزودن
در این بخش میبینید چطور با پایتون روی فایلها بنویسید و چطور به فایلهای موجود چیزی اضافه کنید، بدون اینکه کل محتوای قبلی را پاک کنید.
حالتهای مهم برای نوشتن
در تابع open() حالت (mode) فایل تعیین میکند چه کاری انجام میدهیم:
w: نوشتن (قدیمی را پاک میکند)a: افزودن به انتهای فایل (قدیمی را نگه میدارد)x: ایجاد فایل جدید (اگر وجود داشته باشد خطا میدهد)r+: خواندن و نوشتن (بدون پاک کردن کامل فایل، ولی کار با آن کمی پیشرفتهتر است)
در این فصل روی w و a تمرکز میکنیم.
نوشتن در فایل با حالت `w`
با حالت w:
- اگر فایل وجود نداشته باشد → ساخته میشود.
- اگر فایل وجود داشته باشد → کل محتوای قبلی آن پاک میشود.
مثال ساده:
file = open("note.txt", "w", encoding="utf-8")
file.write("سلام!\n")
file.write("این اولین خط من در فایل است.\n")
file.close()نکات:
\nیعنی رفتن به خط بعدی (مثل Enter).- اگر
file.close()را انجام ندهید، ممکن است دادهها کامل در فایل ذخیره نشوند.
استفاده از `with` برای بستن خودکار فایل
روش امنتر و تمیزتر:
with open("note.txt", "w", encoding="utf-8") as f:
f.write("خط ۱\n")
f.write("خط ۲\n")
# اینجا فایل بهطور خودکار بسته شده است
هر چیزی که داخل بلوک with (با تورفتگی) نوشته شود، به همان فایل مربوط است.
افزودن به فایل با حالت `a`
حالت a محتوا را در انتهای فایل موجود اضافه میکند:
- اگر فایل وجود نداشته باشد → ساخته میشود.
- اگر فایل وجود داشته باشد → چیزی پاک نمیشود، متن جدید به آخر آن اضافه میشود.
with open("note.txt", "a", encoding="utf-8") as f:
f.write("این خط بعداً اضافه شده است.\n")
اگر note.txt قبلاً دو خط داشته باشد، حالا این خط سوم میشود.
مثال: لاگ سادهٔ رویدادها
فرض کنید میخواهید هر بار برنامه اجرا میشود، یک پیام در فایل لاگ ثبت شود:
with open("log.txt", "a", encoding="utf-8") as log:
log.write("برنامه اجرا شد.\n")
هر بار که این بخش از کد اجرا شود، یک خط جدید به log.txt اضافه میشود.
نوشتن چند خط با یک بار `write`
میتوانید یک رشتهٔ چندخطی بسازید و یکجا بنویسید:
text = "خط اول\nخط دوم\nخط سوم\n"
with open("multi.txt", "w", encoding="utf-8") as f:
f.write(text)
یا از join استفاده کنید:
lines = ["سیب", "پرتقال", "موز"]
with open("fruits.txt", "w", encoding="utf-8") as f:
f.write("\n".join(lines) + "\n")در اینجا:
"\n".join(lines)، بین هر دو عنصر لیست یک\nمیگذارد.- در انتها یک
\nاضافه کردیم تا بعد از آخرین مورد هم خط عوض شود.
تفاوت عملی `w` و `a`
فرض کنیم فایل data.txt این محتوا را دارد:
:::text
اولین خط قدیمی
استفاده از `w`
with open("data.txt", "w", encoding="utf-8") as f:
f.write("محتوای جدید\n")حالا محتوا:
:::text
محتوای جدید
همهچیز جایگزین شده است.
استفاده از `a`
with open("data.txt", "a", encoding="utf-8") as f:
f.write("خط اضافه شده\n")
اگر قبلاً data.txt فقط:
:::text
اولین خط قدیمی
را داشت، حالا میشود:
:::text
اولین خط قدیمی
خط اضافه شده
هیچچیز پاک نشد، فقط اضافه شد.
نوشتن با `print` در فایل
میتوان خروجی print را هم به فایل فرستاد، با استفاده از file=:
with open("out.txt", "w", encoding="utf-8") as f:
print("سلام دنیا!", file=f)
print("این خط دوم است.", file=f)در فایل:
:::text
سلام دنیا!
این خط دوم است.
print خودش در انتهای متن \n اضافه میکند، بنابراین لازم نیست آن را دستی بنویسید.
مثالها
مثال ۱: ذخیرهٔ چند نام در فایل
names = ["علی", "مینا", "سارا"]
with open("names.txt", "w", encoding="utf-8") as f:
for name in names:
f.write(name + "\n")
فایل names.txt:
:::text
علی
مینا
سارا
مثال ۲: دفترچه یادداشت ساده (افزودن یادداشت)
این مثال فقط بخش نوشتن/افزودن را نشان میدهد (ورودی کاربر در فصل ورودی/خروجی توضیح داده شده است):
note = input("یادداشت خود را بنویسید: ")
with open("notes.txt", "a", encoding="utf-8") as f:
f.write(note + "\n")
print("یادداشت شما ذخیره شد.")
هر بار که برنامه اجرا شود، یک خط جدید به notes.txt اضافه میشود.
نکات و اشتباهات رایج
- فراموش کردن
\n: - اگر چند
writeانجام دهید و\nنگذارید، همهٔ متنها پشتسرهم در یک خط میآیند. - اشتباه گرفتن
wوa: - اگر میخواهید اضافه کنید، حتماً از
"a"استفاده کنید؛"w"محتوای قبلی را پاک میکند. - فراموش کردن
encodingبرای متن فارسی: - روی بعضی سیستمها بدون
encoding="utf-8"ممکن است متن فارسی بههمریخته ذخیره شود.
اینها ابزارهای اصلی برای نوشتن و افزودن به فایلها هستند؛ در تمرینها و پروژهها مرتب از آنها استفاده خواهید کرد.