کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش توابع مربوط به ورودی و خروجی در پایتون و آبجکت File - Python Files I/O

چاپ خروجی در نمایشگر (Print)

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

#!/usr/bin/python
print "Python is really a great language,", "isn't it?"

دستور بالا خروجی زیر را در نمایشگر چاپ می کند.

Python is really a great language, isn't it?

خواندن و دریافت ورودی از صفحه کلید

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

  • raw_input
  • input

تابع raw_input

تابع raw_input([prompt]) یک خط متن یا نوشته را از ورودی خوانده (از کاربر دریافت می کند) و آن را به عنوان رشته (String) در خروجی بازمی گرداند.

#!/usr/bin/python
str = raw_input("Enter your input: ");
print "Received input is : ", str

این دستور از شما درخواست می کند یک مقدار رشته ای وارد نمایید و سپس همان رشته را در نمایشگر برای کاربر چاپ می کند. به عنوان مثال، زمانی که کاربر مقدار "Hello Python!" را تایپ می کند، خروجی آن به صورت زیر خواهد بود:

Enter your input: Hello Python
Received input is :  Hello Python

تابع input

input([prompt]) از لحاظ کاربرد تقریبا معادل raw_input می باشد، با این تفاوت تابع مزبور فرض را بر این می گذارد که مقدار ورودی یک عبارت پایتون مجاز بوده و نتیجه ی محاسبه شده و حاصل را در خروجی به شما بازمی گرداند.

#!/usr/bin/python
str = input("Enter your input: ");
print "Received input is : ", str

در مقابل ورودی کاربر، خروجی زیر را برمی گرداند.

Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is :  [10, 20, 30, 40]

باز کردن و بستن فایل ها (اعمال تغییرات و مدیریت فایل ها)

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

زبان Python به طور پیش فرض تعدادی تابع درون ساخته جهت مدیریت و ویرایش فایل ها در اختیار برنامه نویس قرار می دهد. جهت انجام اغلب این عملیات ویرایش یا مدیریت فایل ها، می بایست از آبجکت file استفاده نمایید.

تابع Open

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

دستور نگارشی یا گرامر استفاده از file

file object = open(file_name [, access_mode][, buffering])

در زیر جزئیات و اطلاعات مربوط به هر یک از پارامترها را مشاهده می کنید:

  • file_name: آرگومان حاضر در واقع یک مقدار رشته ای است که اسم فایلی که می خواهید به آن دسترسی داشته باشید را شامل می شود.
  • access_mode: این پارامتر وضعیت و سطح عملیاتی که بر روی فایل قابل اجرا خواهد بود را مشخص می کند. به طور مثال فایل بایستی فقط خواندنی باشد یا اینکه اجازه ی درج اطلاعات و ضمیمه ی آن به فایل دیگر را بدهد. در زیر لیست کاملی از تمامی مقادیر قابل استفاده را مشاهده می کنید. این پارامتر اختیاری بوده و در حالت پیش فرض بر روی read تنظیم می باشد (r).
  • file_name: آرگومان جاری یک مقدار رشته ای است که اسم فایلی که قصد دسترسی به آن را دارید، دربرمی گیرد.
  • buffering: چنانچه مقدار buffering بر روی 0 تنظیم شده باشد، هیچگونه داده یا فایلی در بخش مربوط به buffer در حافظه به طور موقت ذخیره نمی شود (فایلی buffer نمی شود). چنانچه مقدار buffering برابر 1 باشد، line buffering به هنگام دسترسی به فایل مورد نظر انجام می شود. اگر مقدار buffering را یک مقدار integer یا عدد صحیح بزرگ تر از 1 قرار دهید، در آن صورت عملیات buffer و ذخیره ی موقتی داده ها در حافظه ی میانی با توجه به buffer size اعلان شده، انجام می گیرد. در صورت منفی بودن، این مقدار پیش فرض سیستم اعمال می شود (رفتار و عملکرد پیش فرض سیستم).

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

وضعیت های مختلف
شرح
r
یک فایل را تنها به منظور خواندن محتوای آن باز می کند. file pointer در ابتدای فایل قرار داده می شود. این وضعیت در واقع حالت پیش فرض باز کردن فایل می باشد.
rb
یک فایل را برای خواندن در فرمت باینری باز می کند. file pointer در ابتدای فایل جای می گیرد. این حالت باز کردن فایل، وضعیت پیش فرض می باشد.
r+
یک فایل را برای خواندن محتوا و نیز درج محتوای جدید در آن باز می کند. file pointer در ابتدای فایل قرار داده می شود.
rb+
یک فایل را برای خواندن محتوا و درج محتوای جدید در آن با فرمت باینری باز می کند. file pointer (اشاره گر) در ابتدای فایل درج می شود.
w
یک فایل را منحصرا به منظور درج محتوای جدید در آن باز می کند. اگر فایل از قبل موجود باشد، آن را بازنویسی می کند (overwrite) می کند. اگر فایل وجود نداشته باشد، یک فایل جهت درج اطلاعات جدید ایجاد می کند.
wb
یک فایل را منحصرا در قالب باینری و جهت درج اطلاعات جدید در آن باز می کند. محتوای فایل را در صورتی که از قبل چنین فایلی وجود داشته باشد، بازنویسی می نماید. اگر فایلی وجود نداشته باشد، خود یک فایل جدید ایجاد می کند.
w+
فایل مورد نظر را هم جهت خواندن و هم جهت درج اطلاعات در آن باز می کند. در صورتی که فایل از قبل موجود باشد، داده های آن را بازنویسی می کند. اگر فایلی وجود نداشته باشد، یک فایل جدید جهت خواندن اطلاعات و درج داده در آن ایجاد می نماید.
wb+
یک فایل را جهت خواندن و نوشتن اطلاعات جدید در آن در قالب باینری باز می کند. چنانچه فایلی از قبل موجود باشد، محتوای آن را بازنویسی می کند و در غیر این صورت یک فایل جدید جهت عملیات خواندن و نوشتن می سازد.
a
یک فایل را جهت ضمیمه کردن محتوای جدید در انتهای محتوای فعلی آن باز می نماید. چنانچه فایلی از قبل موجود باشد، آنگاه اشاره گر یا file pointer در انتهای فایل خواهد بود. به عبارت دیگر فایل در وضعیت append قرار داشته و با سطح دسترسی append (قابلیت افزودن متن جدید در انتهای فایل جاری) باز می شود. اگر فایلی وجود نداشت، در آن صورت فایلی جدید ایجاد خواهد شد.
ab
یک فایل را جهت افزودن محتوای جدید به انتهای آن در قالب باینری باز می نماید. اشاره گر (file pointer) در انتهای فایل جای می گیرد. بدین معنی که فایل در وضعیت append قرار داشته و اجازه ی ضمیمه کردن اطلاعات جدید به انتهای خود را به توسعه دهنده می دهد. اگر چنین فایلی وجود نداشت، یک فایل جدید برای نوشتن محتوای جدید در آن باز می شود.
a+
یک فایل برای افزودن محتوای جدید به انتهای فایل جاری و خواندن محتوای آن باز می کند. اشاره گر در انتهای فایل جاری قرار دارد. فایل مورد نظر در حالت append باز شده و اجازه ی درج محتوای جدید به انتهای آن را می دهد. اگر چنین فایلی وجود نداشت، فایل جدیدی برای خواندن و نوشتن محتوا ایجاد می نماید.
ab+
یک فایل را جهت افزودن محتوای جدید به انتهای آن و نیز خواندن اطلاعات جاری باز می کند. file pointer در انتهای فایل جاری قرار دارد. فایل در حالت append باز شده و اجازه ی اضافه شدن محتوا در انتهای خود را می دهد. اگر فایل موجود نبود، یک فایل جدید برای خواندن محتوا و درج اطلاعات در آن ایجاد می کند.

attribute های آبجکت file

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

در زیر لیستی از تمامی attribute های مربوط به آّبجکت file را مشاهده می کنید:

Attribute
شرح
file.closed
در صورتی که فایل بسته شده باشد، مقدار true و در غیر این صورت false را برمی گرداند.
file.mode
وضعیت و سطح دسترسی که فایل با آن باز شده را در خروجی بازمی گرداند.
file.name
اسم فایل را در خروجی برمی گرداند.
file.softspace
یک مقدار بولی برمی گرداند که مشخص می کند آیا بایستی به هنگام استفاده از دستور print یک خط فاصله ( کاراکتر space) قبل از چاپ مقدار مورد نظر، درج شود یا خیر.
مثال
#!/usr/bin/python
# 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
print "Softspace flag : ", fo.softspace

نتیجه ی زیر را در پی دارد:

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

متد ()close

متد ()close از آبجکت file تمامی اطلاعاتی که به طور دائمی درج نشده را پاک (flush) کرده و سپس آبجکت فایل را می بندد. پس از بسته شدن این آبجکت امکان درج اطلاعات جدید در فایل وجود نخواهد داشت. به عبارت دیگر با فراخوانی ()close بر روی آبجکت file، فایل بسته شده و منابع اشغال شده توسط این فایل آزاد می شود. زمانی که reference object (آبجکت اشاره گر و ارجاع) یک فایل به فایل دیگری تخصیص می یابد، پایتون به صورت خودکار فایل مورد نظر (قبلی) را می بندد.

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

ساختار نگارشی و نحوه ی استفاده از ()Close

fileObject.close();
مثال
#!/usr/bin/python
# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
# Close opend file
fo.close()

خروجی زیر را به دنبال دارد:

Name of the file: foo.txt

خواندن و درج اطلاعات در فایل

آبجکت file تعدادی متد جهت دسترسی آسان به محتوای فایل در اختیار توسعه دهنده قرار می دهد. در زیر به شرح نحوه ی استفاده از ()read و ()write جهت نوشتن در فایل و خواندن اطلاعات آن می پردازیم.

متد ()write

متد ()write تمامی مقادیر رشته ای از هر نوعی را در فایل باز و قابل دسترس درج می کند. لازم به ذکر است که مقادیر رشته ای Python می توانند علاوه بر متن ساده، داده های باینری را نیز دربرداشته باشند.

متد ()write کاراکتر ('\n') را به انتهای رشته اضافه نمی کند.

نحوه ی استفاده از متد

fileObject.write(string);

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

مثال
#!/usr/bin/python
# Open a file
fo = open("foo.txt", "wb")
fo.write( "Python is a great language.\nYeah its great!!\n");
# Close opend file
fo.close()

متد بالا یک فایل foo.txt ایجاد کرده و محتوای ارسال شده به عنوان پارامتر را در فایل مورد نظر درج نموده و سرانجام آن فایل را می بندد. اگر شما این فایل را باز کنید، با محتوای زیر مواجه خواهید شد.

Python is a great language.
Yeah its great!!

متد ()read

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

نحوه ی استفاده از متد

fileObject.read([count]);

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

مثال

حال این متد را بر روی فایل foo.txt که در ابتدای مقاله ی حاضر ایجاد کردید، فراخوانی نمایید.

#!/usr/bin/python
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opend file
fo.close()

نتیجه ی زیر را به دنبال دارد:

Read String is :  Python is

بازیابی موقعیت جاری در فایل (File Position)

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

در واقع ()f.tell یک عدد صحیح (integer) برمی گرداند که موقعیت جاری file object را داخل فایل بازمی گرداند. موقعیت جاری بر حسب بایت از ابتدای فایل محاسبه می شود.

متد seek(offset , [from]) موقعیت جاری آبجکت file را داخل فایل تغییر می دهد. آرگومان offset تعداد بایت هایی که بایستی به جلو حرکت کند را مشخص می نماید. آرگومان دوم، from، آدرسی از خانه ی حافظه (reference position) یا بایت که حرکت از آنجا بایستی آغاز شود را مشخص می کند.

اگر from بر روی 0 تنظیم شده باشد، بدین معنی است که حرکت از ابتدای فایل آغاز می شود (ابتدای فایل به عنوان reference position انتخاب می شود). چنانچه مقدار این پارامتر برابر 1 قرار داده شده باشد، آنگاه حرکت از موقعیت جاری داخل فایل سر گرفته می شود. در صورتی که مقدار آرگومان مورد نظر بر روی 2 تنظیم شده باشد، انتهای فایل به عنوان موقعیتی که حرکت از آنجا باید آغاز شود، تنظیم می شود.

مثال

این توابع را بر روی فایل foo.txt آزمایش و فراخوانی می کنیم.

#!/usr/bin/python
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Check current position
position = fo.tell();
print "Current file position : ", position
# Reposition pointer at the beginning once again
position = fo.seek(0, 0);
str = fo.read(10);
print "Again read String is : ", str
# Close opend file
fo.close()

نتیجه ی زیر را در پی دارد:

Read String is :  Python is
Current file position :  10
Again read String is :  Python is

ویرایش اسم و حذف فایل ها

ماژول OS در پایتون، تعدادی متد کارا جهت انجام عملیات مربوط به پردازش فایل از جمله ویرایش اسم فایل و حذف آن ها از حافظه در اختیار توسعه دهنده قرار می دهد. به منظور استفاده از این ماژول، کافی است آن را با استفاده از دستور OS در بستر پروژه وارد کرده (import)، سپس توابع آن را به راحتی فراخوانی نمایید.

متد rename()

متد rename() دو آرگومان ورودی دریافت می کند: اسم فایل جاری و اسم فایل جدید.

نحوه ی استفاده از متد

os.rename(current_file_name, new_file_name)
مثال

مثال زیر اسم فایل جاری به نام test1.txt را تغییر می دهد:

#!/usr/bin/python
import os
# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )

متد ()remove

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

نحوه ی استفاده از متد

os.remove(file_name)
مثال

در زیر مثالی را مشاهده می کنید که فایل test2.txt را به طور دائمی حذف می کند.

#!/usr/bin/python
import os
# Delete file test2.txt
os.remove("text2.txt")

پوشه های اصلی در پایتون و توابع مربوط به مدیریت دایرکتوری ها

فایل های اپلیکیشن طبیعتا در پوشه های مختلف جای گرفته اند. پایتون به واسطه ی ماژول OS توابع کارامد متعددی در اختیار برنامه نویس قرار می دهد که ایجاد، حذف و ویرایش پوشه های اصلی و دایرکتوری را تسهیل می بخشد.

متد ()mkdir

می توانید با استفاده از متد ()mkdir قابل فراخوانی از ماژول OS، پوشه هایی (directory) در دایرکتوری فعلی ایجاد نمایید. لازم است اسم دایرکتوری دلخواه را به عنوان پارامتر به این متد ارسال نمایید تا آن را ایجاد کند.

نحوه ی استفاده از متد

os.mkdir("newdir")
مثال

در زیر مثالی را مشاهده می کنید که در آن یک دایرکتوری به نام test در پوشه (دایرکتوری) جاری ایجاد می شود.

#!/usr/bin/python
import os
# Create a directory "test"
os.mkdir("test")

متد ()chdir

جهت تغییر دایرکتوری یا پوشه ی جاری می توانید متد ()chdir را فراخوانی نمایید. این متد اسم پوشه یا دایرکتوری که می خواهید پوشه ی جاری را به آن تغییر دهید، به عنوان آرگومان دریافت می کند.

نحوه ی استفاده از متد

os.chdir("newdir")
مثال

مثال زیر پوشه (دایرکتوری) جاری را به دایرکتوری "/home/newdir" تغییر می دهد.

#!/usr/bin/python
import os
# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

متد ()getcwd

متد ()getcwd همان طور که از اسم آن پیدا است، موقعیت پوشه ی فعال و جاری را در خروجی نمایش می دهد.

دستور استفاده از متد

os.getcwd()
مثال

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

#!/usr/bin/python
import os
# This would give location of the current directory
os.getcwd()

متد rmdir()

متد rmdir() پوشه ی مورد نظر که به عنوان آرگومان به آن ارسال شده را به طور دائمی حذف می کند.

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

دستور استفاده از متد

os.rmdir('dirname')
مثال

در زیر مثالی را می بینید که در آن پوشه ی "/tmp/test" به طور دائمی حذف می شود. لازم است اسم و آدرس پوشه که به صورت کامل قید شده را به عنوان پارامتر به متد نام برده ارسال نمایید چرا که در غیر این صورت متد به دنبال آن دایرکتوری در پوشه ی جاری می گردد.

#!/usr/bin/python
import os
# This would  remove "/tmp/test"  directory.
os.rmdir( "/tmp/test"  )

توابع مربوط به مدیریت فایل و دایرکتوری

سه منبع بسیار مهم وجود دارد که طیف گسترده ای از توابع کمکی و کارا جهت مدیریت و دستکاری فایل ها و پوشه ها در محیط سیستم عامل های Windows و Unix را در دسترس توسعه دهندگان قرار می دهد. این توابع به شرح زیر می باشند:

  • متدهای آبجکت file (File Object Methods): آبجکت file توابع متعددی جهت مدیریت و ویرایش فایل ها در اختیار برنامه نویس می گذارد.
  • متدهای آبجکت OS (OS Object Methods): توابعی که در دسترس توسعه دهنده قرار می دهد قادر هستند که علاوه بر فایل، پوشه را نیز (دایرکتوری) پردازش کنند.
1396/02/13 13653 3030
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...