مشخصات مقاله
-
3030
-
0.0
-
13653
-
0
-
0
آموزش توابع مربوط به ورودی و خروجی در پایتون و آبجکت 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 اعلان شده، انجام می گیرد. در صورت منفی بودن، این مقدار پیش فرض سیستم اعمال می شود (رفتار و عملکرد پیش فرض سیستم).
در زیر حالات مختلف باز کردن فایل با سطوح دسترسی مختلف تشریح شده است:
attribute های آبجکت file
پس از باز کردن فایل و ایجاد آبجکت file، می توانید اطلاعات مختلف مربوط به آن فایل را بازیابی نمایید.
در زیر لیستی از تمامی attribute های مربوط به آّبجکت file را مشاهده می کنید:
#!/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): توابعی که در دسترس توسعه دهنده قرار می دهد قادر هستند که علاوه بر فایل، پوشه را نیز (دایرکتوری) پردازش کنند.