نوشتن در یک فایل

یکی از ساده‌ترین راه‌ها برای ذخیره‌سازی داده‌ها نوشتن آن‌ها در یک فایل است. زمانی که متنی را در فایلی می‌نویسید، خروجی بعد از بستن ترمینالی که آن را نشان می‌دهد، همچنان در دسترس خواهد بود. می‌توانید خروجی را پس از پایان اجرای یک برنامه بررسی کنید یا آن را در اختیار دیگران قرار دهید. همچنین می‌توانید برنامه‌هایی بنویسید که متن را دوباره به حافظه منتقل کرده و بعداً با آن‌ها کار کند.

نوشتن در یک فایل خالی

برای نوشتن در یک فایل باید open() را با نشان‌وند دومی فراخوانی کنید که به پایتون می‌گوید می‌خواهید در آن فایل چیزی بنویسید. برای این که ببینیم این کار چگونه انجام می‌شود، پیام ساده‌ای می‌نویسیم و به جای نمایش آن بر روی صفحه، آن را در یک فایل ذخیره می‌کنیم:

1
2
3
4
filename = 'programming.txt'

with open(filename, 'w') as file_object:
    file_object.write("I love programming.")

در این مثال فراخوانی open() در ۱ با دو نشان‌وند انجام می‌شود. اوّلین نشان‌وند همچنان نام فایلی95 94 است که می‌خواهیم باز کنیم. دومین نشان‌وند 'w'، به پایتون می‌گوید که می‌خواهیم فایل را در حالت نوشتن باز کنید. شما می‌توانید فایلی را در حالت خواندن ('r')، حالت نوشتن ('w')، حالت الحاق ('a') و یا حالتی که به شما اجازه‌ی خواندن و نوشتن فایل می‌دهد ('r+') باز کنید. اگر نشان‌وند مربوط به حالت خواندن را حذف کنید، پایتون به طور پیش‌فرض فایل را در حالت فقط-خواندنی باز می‌کند.

اگر فایلی که می‌خواهید در آن چیزی بنویسید وجود نداشته باشد، تابع open() آن را به طور خودکار برای شما می‌سازد. با این حال هنگام باز کردن فایل در حالت ('w') دقّت کنید؛ چون اگر قبلاً فایلی به این نام وجود داشته باشد، پایتون پیش از بازگرداندن شیء فایل، تمام محتویّات آن را پاک می‌کند.

در ۲ از متد write() بر روی شیء فایل استفاده می‌کنیم تا رشته‌ای در آن بنویسیم. این برنامه هیچ خروجی‌ای ندارد امّا اگر فایل programming.txt را باز کنید در آن یک خط می‌بینید:

1
I love programming.

این فایل مانند هر فایل دیگری در رایانه‌ی شما رفتار می‌کند. می‌توانید آن را باز کنید، متن جدیدی در آن بنویسید، از آن چیزی کپی کنید، به آن چیزی اضافه کنید و … .

نکته
پایتون تنها می‌تواند در یک فایل متنی رشته‌ها را بنویسد. اگر می‌خواهید داده‌های عددی را در یک فایل متنی ذخیره کنید باید ابتدا آن را به کمک تابع str() به شکل متنی دربیاورید.

نوشتن چند خط

تابع write() هیچ خطّ جدیدی به متن شما اضافه نمی‌کند. بنابراین اگر بدون افزودن کاراکتر خطّ اضافه بیشتر از یک خط بنویسید، ممکن است فایل شما آن‌جور که انتظار دارید به نظر نیاید:

1
2
3
4
5
filename = 'programming.txt'

with open(filename, 'w') as file_object:
    file_object.write("I love programming.")
    file_object.write("I love creating new games.")

افزودن خط‌های جدید هنگام فراخوانی write() هر رشته را در خط خود جای می‌دهد:

1
2
3
4
5
filename = 'programming.txt'

with open(filename, 'w') as file_object:
    file_object.write("I love programming.\n")
    file_object.write("I love creating new games.\n")

حال در خروجی خط‌های جداگانه می‌بینیم:

1
2
I love programming.
I love creating new games.

شما می‌توانید از فاصله، کاراکترِ تب یا خط‌های خالی برای شکل دادن به خروجی خود استفاده کنید همانگونه که در خروجی‌های خود در ترمینال انجام می‌دادید.

اضافه کردن به یک فایل

اگر می‌خواهید مطلبی به یک فایل اضافه کنید، به جای رونویسی بر مطالب قبلی می‌توانید فایل را در حالت الحاق باز کنید. زمانی که فایل را در این حالت باز می‌کنید، پایتون پیش از بازگرداندنِ شیء، محتویّات آن را پاک نمی‌کند. هر خطّی که در فایل بنویسید به انتهای آن افزوده خواهد شد. اگر فایل وجود نداشته باشد، پایتون یک فایل خالی برای شما خواهد ساخت.

حال write_message.py را با اضافه کردن چند دلیل برای دوست‌داشتن برنامه‌نویسی به فایلِ موجودِ programming.txt تغییر می‌دهیم:

1
2
3
4
5
filename = 'programming.txt'

with open(filename, 'a') as file_object:
    file_object.write("I also love finding meaning in large datasets.\n")
    file_object.write("I love creating apps that can run in a browser.\n")

در ۱ از نشان‌وند 'a' برای باز کردن فایل استفاده می‌کنیم تا به جای این که محتویّات آن را رونویسی کنیم، به آن چیزی اضافه کنیم. در ۲ دو خطّ جدید می‌نویسیم که به programming.txt اضافه می‌شوند:

1
2
3
4
I love programming.
I love creating new games.
I also love finding meaning in large datasets.
I love creating apps that can run in a browser.

در نهایت به همان محتویّات اصلی فایل می‌رسیم که دو خطّ جدید به آن اضافه شده است.