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

مدیریت فایل در پایتون

مدیریت فایل در پایتون شامل تعامل با فایل‌های موجود در رایانه برای خواندن داده‌ها از آن‌ها یا نوشتن داده‌ها در آن‌ها است. پایتون چندین تابع و متد داخلی برای ایجاد، باز کردن، خواندن، نوشتن و بستن فایل‌ها ارائه می‌دهد. این آموزش، مبانی مدیریت فایل در پایتون را همراه با مثال‌ها بررسی می‌کند.

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

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

file = open("filename", "mode")

در اینجا، filename نام فایلی است که باید باز شود و mode حالت باز کردن فایل را مشخص می‌کند (برای مثال، 'r' برای خواندن، 'w' برای نوشتن و 'a' برای افزودن محتوا).

حالت‌های باز کردن فایل

حالت‌های باز کردن فایل به شرح زیر هستند:

شماره حالت‌ها و توضیحات
1

r

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

2

rb

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

3

r+

فایل را هم برای خواندن و هم برای نوشتن باز می‌کند. نشانگر فایل در ابتدای آن قرار می‌گیرد.

4

rb+

فایل را هم برای خواندن و هم برای نوشتن در قالب باینری باز می‌کند. نشانگر فایل در ابتدای آن قرار می‌گیرد.

5

w

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

6

b

فایل را در حالت باینری باز می‌کند.

7

t

فایل را در حالت متنی باز می‌کند (حالت پیش‌فرض).

8

+

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

9

wb

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

10

w+

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

11

wb+

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

12

a

فایل را برای افزودن محتوا باز می‌کند. اگر فایل وجود داشته باشد، نشانگر فایل در انتهای آن قرار می‌گیرد. به عبارت دیگر، فایل در حالت افزودن محتوا قرار می‌گیرد. اگر فایل وجود نداشته باشد، فایل جدیدی برای نوشتن ایجاد می‌شود.

13

ab

فایل را برای افزودن محتوا در قالب باینری باز می‌کند. اگر فایل وجود داشته باشد، نشانگر فایل در انتهای آن قرار می‌گیرد. به عبارت دیگر، فایل در حالت افزودن محتوا قرار می‌گیرد. اگر فایل وجود نداشته باشد، فایل جدیدی برای نوشتن ایجاد می‌شود.

14

a+

فایل را هم برای افزودن محتوا و هم برای خواندن باز می‌کند. اگر فایل وجود داشته باشد، نشانگر فایل در انتهای آن قرار می‌گیرد. فایل در حالت افزودن محتوا باز می‌شود. اگر فایل وجود نداشته باشد، فایل جدیدی برای خواندن و نوشتن ایجاد می‌شود.

15

ab+

فایل را هم برای افزودن محتوا و هم برای خواندن در قالب باینری باز می‌کند. اگر فایل وجود داشته باشد، نشانگر فایل در انتهای آن قرار می‌گیرد. فایل در حالت افزودن محتوا باز می‌شود. اگر فایل وجود نداشته باشد، فایل جدیدی برای خواندن و نوشتن ایجاد می‌شود.

16

x

فایل را برای ایجاد انحصاری باز می‌کند و در صورتی که فایل از قبل وجود داشته باشد، عملیات با خطا مواجه می‌شود.

پس از باز کردن فایل و در اختیار داشتن یک شیء فایل، می‌توانید اطلاعات مختلفی درباره آن به دست آورید.

مثال ۱

در مثال زیر، یک فایل را در حالت‌های مختلف باز می‌کنیم:

# Opening a file in read mode
file = open("example.txt", "r")

# Opening a file in write mode
file = open("example.txt", "w")

# Opening a file in append mode
file = open("example.txt", "a")

# Opening a file in binary read mode
file = open("example.txt", "rb")

مثال ۲

در این مثال، فایلی با نام "foo.txt" را در حالت نوشتن باینری ("wb") باز می‌کنیم، نام فایل، وضعیت بسته بودن آن و حالت باز شدنش را نمایش می‌دهیم و سپس فایل را می‌بندیم:

# Open a file
fo = open("foo.txt", "wb")
print ("Name of the file: ", fo.name)
print ("Closed or not: ", fo.closed)
print ("Opening mode: ", fo.mode)
fo.close()

خروجی زیر تولید می‌شود:

Name of the file: foo.txt
Closed or not: False
Opening mode: wb

خواندن فایل در پایتون

خواندن فایل در پایتون شامل باز کردن فایل در حالتی است که امکان خواندن را فراهم می‌کند و سپس استفاده از متدهای مختلف برای استخراج داده‌ها از فایل است. پایتون چندین متد برای خواندن داده‌ها از فایل ارائه می‌دهد:

  • read() - کل محتوای فایل را می‌خواند.

  • readline() - هر بار یک خط را می‌خواند.

  • readlines - همه خطوط را در قالب یک فهرست می‌خواند.

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

مثال: استفاده از متد read()

در مثال زیر، از متد read() استفاده می‌کنیم تا کل محتوای فایل را در قالب یک رشته واحد بخوانیم:

with open("example.txt", "r") as file:
    content = file.read()
    print(content)

خروجی به‌دست‌آمده به این صورت است:

Hello!!!
Welcome to TutorialsPoint!!!

مثال: استفاده از متد readline()

در این مثال، از متد readline() برای خواندن هر بار یک خط استفاده می‌کنیم. این روش برای خواندن فایل‌های بزرگ، خط‌به‌خط، از نظر مصرف حافظه بهینه است:

with open("example.txt", "r") as file:
    line = file.readline()
    while line:
       print(line, end='')
       line = file.readline()

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

Hello!!!
Welcome to TutorialsPoint!!!

مثال: استفاده از متد readlines()

اکنون از متد readlines() استفاده می‌کنیم تا کل فایل را بخوانیم و آن را به فهرستی تقسیم کنیم که هر عنصر آن یک خط از فایل است:

with open("example.txt", "r") as file:
    lines = file.readlines()
    for line in lines:
       print(line, end='')

خروجی به این صورت خواهد بود:

Hello!!!
Welcome to TutorialsPoint!!!

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

نوشتن در فایل در پایتون شامل باز کردن فایل در حالتی است که امکان نوشتن را فراهم می‌کند و سپس استفاده از متدهای مختلف برای افزودن محتوا به فایل است.

برای نوشتن داده‌ها در فایل، از متدهای write() یا writelines() استفاده کنید. هنگام باز کردن فایل در حالت نوشتن ('w')، محتوای قبلی فایل پاک می‌شود.

مثال: استفاده از متد write()

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

with open("foo.txt", "w") as file:
    file.write("Hello, World!")
    print ("Content added Successfully!!")

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

Content added Successfully!!

مثال: استفاده از متد writelines()

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

lines = ["First line\n", "Second line\n", "Third line\n"]
with open("example.txt", "w") as file:
    file.writelines(lines)
    print ("Content added Successfully!!")

نتیجه به‌دست‌آمده به این صورت است:

Content added Successfully!!

بستن فایل در پایتون

می‌توانیم با استفاده از متد close() یک فایل را در پایتون ببندیم. بستن فایل مرحله‌ای ضروری در مدیریت فایل است، زیرا اطمینان حاصل می‌کند که تمام منابعی که فایل استفاده کرده است، به‌درستی آزاد شوند. پس از پایان عملیات، مهم است که فایل‌ها را ببندید تا از ازدست‌رفتن داده‌ها جلوگیری شود و منابع سیستم آزاد بمانند.

مثال

در این مثال، فایل را برای نوشتن باز می‌کنیم، داده‌ها را در آن می‌نویسیم و سپس با استفاده از متد close() فایل را می‌بندیم:

file = open("example.txt", "w")
file.write("This is an example.")
file.close()
print ("File closed successfully!!")

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

File closed successfully!!

استفاده از دستور with برای بستن خودکار فایل

استفاده از دستور with یکی از بهترین روش‌ها برای انجام عملیات فایل در پایتون است، زیرا تضمین می‌کند که با خروج از بلوک کد، فایل به‌صورت خودکار بسته شود؛ حتی اگر استثنایی رخ دهد.

مثال

در این مثال، فایل در پایان بلوک with به‌صورت خودکار بسته می‌شود؛ بنابراین نیازی نیست متد close() را به‌صورت صریح فراخوانی کنیم:

with open("example.txt", "w") as file:
    file.write("This is an example using the with statement.")
    print ("File closed successfully!!")

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

File closed successfully!!

مدیریت استثناها هنگام بستن فایل

هنگام انجام عملیات روی فایل، مدیریت استثناهای احتمالی اهمیت دارد تا برنامه بتواند خطاها را به‌درستی کنترل کند.

در پایتون، برای مدیریت استثناها هنگام بستن فایل، از بلوک try-finally استفاده می‌کنیم. بلوک "finally" تضمین می‌کند که فایل بسته شود، صرف‌نظر از اینکه در بلوک try خطایی رخ دهد یا خیر:

try:
    file = open("example.txt", "w")
    file.write("This is an example with exception handling.")
finally:
    file.close()
    print ("File closed successfully!!")

پس از اجرای کد بالا، خروجی زیر را دریافت می‌کنیم:

File closed successfully!!

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