شهریور ۲۲, ۱۳۹۸ Mostafa بدون دیدگاه

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

توجه : درخواست افزونه ،قالب، اسکریپت و نرم افزار و ... و سوالات و مشکلات خود را در انجمن ارسال نمایید

فایل ها در چرخه یک برنامه زیاد دیده میشوند و یک برنامه نویس خوب همیشه باید توانایی کار با فایل های مختلف را داشته باشد. در این مقاله قصد داریم نحوه کار با فایل در پایتون (Python File Handling) را بررسی کرده و آموزش دهیم.

 

در این مقاله ما با پایتون نسخه ۳.۵ کار خواهیم کرد؛ در نسخه ۲.۷ پایتون نیز روند کار به صورت مشابه هست و تفاوت چندانی ندارد.

 

برای کار با فایل در پایتون نیاز به استفاده و Import کردن هیچ ماژول اضافی و مازادی نداریم.

برای کار با فایل باید از شی File در پایتون استفاده کنیم. این شی (Object) اطلاعاتی از فایل و توابعی ساده ای در اختیارمان میگذارد تا بتوانیم با فایل ها به راحتی کار کنیم.

اولین کار برای انجام عملیات های مختلف روی یک فایل، این است که یک شی از File مورد نظر خود داشته باشیم. برای این کار به طور مستقیم از تابع open() استفاده میکنیم.

این تابع دو آرگومان ورودی میگیرد؛ اولی مسیر و نام فایل است و دومین آرگومان مشخص کننده حالت باز شونده فایل است.

file_name = "test.txt"
file = open(file_name, "a+")

حالت (mode) های مختلف باز کردن یک فایل

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

  • r : خواندن (شروع از ابتدای فایل)
  • r+ : خواندن و نوشتن (شروع از ابتدای فایل)
  • w : ایجاد فایل برای نوشتن (شروع از ابتدا)
  • w+ : ایجاد فایل برای نوشتن و خواندن (شروع از ابتدا)
  • a : خواندن (شروع از انتها)
  • a+ : خواندن و نوشتن (شروع از انتها)

در دو مورد حالت w در صورتی که فایلی از قبل وجود داشته باشد، فایل را پاک کرده و یک فایل جدید ایجاد میکند.

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

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

 

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

مقدار برگردانده شده توسط تابع open() را در یک متغیر ذخیره میکنیم تا بعداً بتوانیم توابع مورد نیاز خود را روی آن صدا زده و اعمال مختلفی روی فایل خود انجام دهیم.

file_name = "test.txt"
file = open(file_name)

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

dear user,
This is a test file!
visit us at mypgr.ir

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

 

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

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

تابع read

این تابع که می بایست روی متغیر شی فایل صدا زده شود، یک رشته متنی بزرگ به ما برمیگرداند که حاوی تمام محتویات فایل ماست.

file = open(file_name)
print(file.read())

# dear user,
# This is a test file!
# visit us at mypgr.ir

توجه داشته باشید که اگر دو بار این تابع را پشت سر هم صدا بزنیم، در دفعه دوم، هیچ مقداری برای ما چاپ نمیشود! به دلیل اینکه تمام فایل تا انتها بررسی و خوانده شده و دیگر محتوای بیشتری برای نمایش نداریم.

تابع read() یک آرگومان ورودی به صورت دلخواه میتواند داشته باشد؛ این آرگومان از نوع عددی بوده و مشخص میکند که چه تعداد کاراکتر خوانده شود.

file = open(file_name)
print(file.read(7))

# dear us

تابع readline

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

file = open(file_name)
print(file.readline())
print(file.readline())

# dear user,
#
# This is a test file!
#

توجه کنید که در انتهای هر خط فایل، کاراکتر سطر جدید (\n) وجود دارد و تابع print که ما در مثال استفاده میکنیم نیز پس از هر بار چاپ کردن، به سطر جدید میرود؛ به همین دلیل است که در نتیجه کد فوق، برای هر خط، دو بار به سطر جدید میرویم.

تابع readlines

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

file = open(file_name)
print(file.readlines())

# ['dear user,\n', 'This is a test file!\n', 'visit us at www.sabzelco.ir']

استفاده از حلقه برای خواندن محتویات فایل

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

در صورتی که متغیر فایل را در یک حلقه استفاده کنیم، مشابه آن است که تابع readlines() را روی آن صدا زده و لیست نتیجه را به حلقه for داده ایم.

file = open(file_name)
for line in file:
    print(line)

# dear user,
#
# This is a test file!
#
# visit us at mypgr.ir

بستن فایل پس از کار با فایل

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

همچنین اگر در هنگام نوشتن یک فایل باشید و نتوانید در انتهای کار آن را به درستی ببندید، چیزی در فایل ذخیره نخواهد شد!

file.close()

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

برای نوشتن فایل در زبان python دو تابع اصلی وجود دارد.

تابع write

این تابع یک رشته را به عنوان ورودی گرفته و درون فایل می نویسد.

file_name2 = "test2.txt"
file = open(file_name2, "w")
file.write("hello world!")
file.close()

با اجرای قطعه کد بالا، درون فایل text2.txt که در کنار برنامه وجود داشته یا ایجاد شده است، صرفاً عبارت معروف hello world! نوشته میشود.

 

تابع writelines

این تابع یک لیست از رشته های متنی گرفته و آن ها را به ترتیب درون فایل مورد نظر می نویسد.

file = open(file_name, "w")
file.writelines(["hello world!\n", "test line"])
file.close()

اضافه کردن محتوا به محتوای موجود فایل در پایتون

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

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

 

حذف فایل در پایتون

برای حذف کردن یک فایل در زبان پایتون، می بایست ماژول os را به برنامه خود اضافه کنیم.

برای این کار کد زیر را در ابتدای برنامه خود می نویسیم.

import os

این ماژول یک تابع به نام remove() داشته که با صدا زدن آن بر روی ماژول و دادن نام فایل به عنوان ورودی، فایل مورد نظر حذف شود. (اگر فایل در کنار برنامه نباشد می توان مسیر فایل را به عنوان ورودی داد.)

os.remove("test2.txt")

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

برای این کار میتوانیم از توابع دیگری که در ماژول os وجود دارد استفاده کرده و مانند قطع کد زیر عملیات حذف را انجام دهیم.

if os.path.exists("delete_file.txt"):
  os.remove("delete_file.txt")