آموزش پایتون - نوشتن در فایل

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

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

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

تابع open()

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

حالت‌های فایل برای نوشتن

در ادامه، حالت‌های اصلی که می‌توانید برای باز کردن یک فایل جهت نوشتن استفاده کنید، آورده شده‌اند:

  • w (حالت نوشتن) - فایل را برای نوشتن باز می‌کند. اگر فایل وجود داشته باشد، پیش از نوشتن، محتوای آن پاک می‌شود. اگر فایل وجود نداشته باشد، یک فایل جدید ایجاد می‌کند.

  • a (حالت افزودن) - داده‌ها در انتهای فایل نوشته می‌شوند. اگر فایل وجود نداشته باشد، یک فایل جدید ایجاد می‌کند.

  • x (حالت ایجاد انحصاری) - فایل را برای ایجاد انحصاری باز می‌کند. اگر فایل از قبل وجود داشته باشد، عملیات با شکست مواجه می‌شود.

  • b (حالت باینری) - هنگامی که همراه با حالت‌های دیگر استفاده شود، فایل را در حالت باینری باز می‌کند.

  • + (حالت به‌روزرسانی) - فایل را برای به‌روزرسانی، یعنی خواندن و نوشتن، باز می‌کند.

مثال: باز کردن فایل در حالت نوشتن

زمانی از این حالت استفاده می‌شود که بخواهید هر بار با باز کردن فایل، نوشتن داده‌ها را از ابتدا شروع کنید:

file = open("example.txt", "w")
file.write("Hello, World!")
file.close()
print ("File opened successfully!!")

خروجی حاصل به صورت زیر است:

File opened successfully!!

مثال: باز کردن فایل در حالت افزودن

زمانی از این حالت استفاده می‌شود که بخواهید داده‌هایی را به انتهای فایل اضافه کنید، بدون اینکه محتوای موجود آن تغییر کند:

file = open("example.txt", "a")
file.write("Appending this line.\n")
file.close()
print ("File opened successfully!!")

این کد نتیجه زیر را تولید می‌کند:

File opened successfully!!

نوشتن در فایل با استفاده از متد write()

از متد write() برای نوشتن یک رشته در فایل استفاده می‌شود. به همین دلیل، این متد برای انواع مختلف عملیات مربوط به فایل‌های متنی مناسب است.

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

مثال

در مثال زیر، فایل "example.txt" را در حالت نوشتن باز می‌کنیم. سپس از متد write() برای نوشتن یک رشته در فایل استفاده می‌کنیم:

# Open a file in write mode
with open("example.txt", "w") as file:
   file.write("Hello, World!\n")
   file.write("This is a new line.\n")
print ("File opened successfully!!")

خروجی کد بالا به صورت زیر است:

File opened successfully!!

نوشتن در فایل با استفاده از متد writelines()

از متد writelines() برای نوشتن فهرستی از رشته‌ها در یک فایل استفاده می‌شود. هر رشته موجود در فهرست، به ترتیب در فایل نوشته می‌شود و هیچ کاراکتر رفتن به خط جدید به‌صورت خودکار به آن اضافه نمی‌شود.

مثال

در این مثال، فهرستی از رشته‌ها به نام lines ایجاد می‌کنیم که هر رشته آن با یک کاراکتر رفتن به خط جدید پایان می‌یابد. سپس فایل "example.txt" را در حالت نوشتن باز می‌کنیم و از متد writelines() استفاده می‌کنیم تا تمام رشته‌های موجود در فهرست را طی یک عملیات در فایل بنویسیم:

# List of lines to write to the file
lines = ["First line\n", "Second line\n", "Third line\n"]

# Open a file in write mode
with open("example.txt", "w") as file:
    file.writelines(lines)

print ("File opened successfully!!")

خروجی حاصل، همان‌طور که در ادامه نشان داده شده است، به شکل زیر خواهد بود:

File opened successfully!!

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

نوشتن در یک فایل جدید در پایتون شامل ایجاد یک فایل جدید یا بازنویسی یک فایل موجود و نوشتن محتوای موردنظر در آن است. در ادامه، مراحل نوشتن در یک فایل جدید را توضیح می‌دهیم:

  • باز کردن فایل - از تابع open() برای ایجاد یا باز کردن یک فایل در حالت نوشتن استفاده کنید ("w" یا "wb" برای فایل‌های باینری).

  • نوشتن داده‌ها - از متد write() یا writelines() برای نوشتن داده‌ها در فایل استفاده کنید.

  • بستن فایل - پس از نوشتن، مطمئن شوید که فایل به‌درستی بسته می‌شود. معمولاً برای مدیریت خودکار این کار از دستور "with" استفاده می‌شود.

مثال

در مثال زیر، یک فایل به نام "foo.txt" ایجاد می‌کنیم، محتوای داده‌شده را در آن می‌نویسیم و در نهایت فایل را می‌بندیم:

# Open a file
fo = open("foo.txt", "w")
fo.write( "Python is a great language.\nYeah its great!!\n")

# Close opened file
fo.close()

اگر این فایل را با هر برنامه ویرایش متن، مانند Notepad، باز کنید، محتوای آن به صورت زیر خواهد بود:

Python is a great language.
Yeah its great!!

نوشتن در یک فایل جدید در حالت باینری

به‌طور پیش‌فرض، عملیات خواندن و نوشتن روی یک شیء فایل با داده‌های رشته‌ای متنی انجام می‌شوند. اگر لازم باشد فایل‌هایی با انواع مختلف، مانند فایل‌های رسانه‌ای (mp3)، فایل‌های اجرایی (exe) یا تصاویر (jpg)، را مدیریت کنیم، باید با افزودن پیشوند 'b' به حالت خواندن و نوشتن، فایل را در حالت باینری باز کنیم.

نوشتن داده‌های باینری در فایل

برای نوشتن داده‌های باینری در یک فایل، آن را در حالت نوشتن باینری ('wb') باز کنید. مثال زیر این روش را نشان می‌دهد:

# Open a file in binary write mode
with open('test.bin', 'wb') as f:
   # Binary data
   data = b"Hello World"  
   f.write(data)

تبدیل رشته‌های متنی به بایت‌ها

تبدیل یک رشته متنی به بایت‌ها را می‌توان با استفاده از تابع encode() انجام داد. این روش زمانی مفید است که بخواهید داده‌های متنی را به‌صورت داده‌های باینری در فایل بنویسید:

# Open a file in binary write mode
with open('test.bin', 'wb') as f:
   # Convert text string to bytes
   data = "Hello World".encode('utf-8')  
   f.write(data)

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

هنگامی که یک فایل موجود در حالت نوشتن ('w') باز می‌شود، محتوای قبلی آن پاک می‌شود. باز کردن فایل با مجوز نوشتن، باعث می‌شود با آن مانند یک فایل جدید رفتار شود. برای افزودن داده به یک فایل موجود بدون پاک کردن محتوای آن، باید فایل را در حالت افزودن ('a') باز کنید.

مثال

مثال زیر نشان می‌دهد که چگونه یک فایل را در حالت افزودن باز کنیم و متن جدیدی به آن اضافه کنیم:

# Open a file in append mode
fo = open("foo.txt", "a")
text = "TutorialsPoint has a fabulous Python tutorial"
fo.write(text)

# Close opened file
fo.close()

اگر این فایل را با هر برنامه ویرایش متن، مانند Notepad، باز کنید، محتوای آن به صورت زیر خواهد بود:

Python is a great language.
Yeah its great!!
TutorialsPoint has a fabulous Python tutorial

نوشتن در فایل در حالت‌های خواندن و نوشتن

هنگامی که فایلی برای نوشتن با استفاده از حالت 'w' یا 'a' باز می‌شود، امکان انجام عملیات نوشتن در موقعیت‌های بایتی قبلی فایل وجود ندارد. با این حال، حالت 'w+' امکان انجام عملیات خواندن و نوشتن را بدون بستن فایل فراهم می‌کند. از تابع seek() برای انتقال اشاره‌گر خواندن و نوشتن به هر موقعیت بایتی دلخواه در فایل استفاده می‌شود.

استفاده از متد seek()

از متد seek() برای تعیین موقعیت اشاره‌گر خواندن و نوشتن در فایل استفاده می‌شود. ساختار دستوری متد seek() به صورت زیر است:

fileObject.seek(offset[, whence])

در این ساختار:

  • offset - موقعیت اشاره‌گر خواندن و نوشتن را در فایل مشخص می‌کند.

  • whence - این آرگومان اختیاری است و مقدار پیش‌فرض آن 0 است که به معنی تعیین موقعیت مطلق در فایل است. مقدارهای دیگر عبارت‌اند از 1 که به معنی جابه‌جایی نسبت به موقعیت فعلی است و 2 که به معنی جابه‌جایی نسبت به انتهای فایل است.

مثال

برنامه زیر نشان می‌دهد که چگونه یک فایل را در حالت خواندن و نوشتن ('w+') باز کنیم، مقداری داده در آن بنویسیم، به موقعیتی مشخص برویم و سپس بخشی از محتوای فایل را بازنویسی کنیم:

# Open a file in read-write mode
fo = open("foo.txt", "w+")

# Write initial data to the file
fo.write("This is a rat race")

# Move the read/write pointer to the 10th byte
fo.seek(10, 0)

# Read 3 bytes from the current position
data = fo.read(3)

# Move the read/write pointer back to the 10th byte
fo.seek(10, 0)

# Overwrite the existing content with new text
fo.write('cat')

# Close the file
fo.close()

اگر فایل را در حالت خواندن باز کنیم یا در حالت 'w+' اشاره‌گر را به ابتدای فایل منتقل کنیم و محتوای آن را بخوانیم، نتیجه به صورت زیر خواهد بود:

This is a cat race

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.