سلام دوستان
با ادامه ی کتاب پایتون مقدماتی که به همراه دوست عزیزم جناب مهندس مهدی عباسپور شاهمرس نوشته و چاپ کردیم در خدمتتون هستیم.
این فصل از کتاب، تمامی توابع اولیه I/O[1] موجود در پایتون را پوشش میدهد. البته برای کسب اطلاعات بیشتر در مورد این نوع توابع، میتوانید به اسناد استاندارد پایتون مراجعهنمایید.
[1]Input/Output
همان طوری که از قبل میدانیم، سادهترین راه برای تولید خروجی، استفاده از دستور print است که در آن میتوانید عبارات دلخواه خود را با کاما از هم جداکنید. این تابع به طور خودکار هر چیزی را که در آن وارد میکنیم، به یک رشته تبدیلکرده و نتایج را همانند شکل (16-1)، به صورت استاندارد در خروجی ظاهر میکند. البته اگر هیچ عبارتی به عنوان ورودی نداشتهباشیم، مقدار خالی را در خروجی خواهیمداشت.
زبان پایتون، تابع توکار Raw_Input را برای خواندن یک خط متن از ورودی استاندارد (به طور پیش فرض، صفحه کلید)، فراهم میکند. ما در ادامه به توضیح این توابع میپردازیم.
تابع مذکور، یک خط (اتمام با کلید Enter) را از کاربر دریافتکرده و آن را به عنوان یک رشته برمیگرداند. البته علامت خط جدیدی که در انتهای این ورودی وجود دارد را حذف میکند. نمونهای از کاربرد آن را در شکل (16-2) میبینید. گفتنیاست که این تابع در پایتون نسخه2 کاربرد دارد. در نسخههای جدیدتر، این تابع را به ( ) input تغییر نام دادند.
با اجرای این قطعه کد، از کاربر درخواست میشود که رشتهی دلخواه خود را وارد کند. در نهایت رشتهی وارده به همراه عبارت موجود در دستور چاپ، در خروجی ظاهر میشود. با فرض این که کاربر عبارت "Hello Python" را وارد کند، ورودی و خروجی ما به شکل (16-3) خواهدشد.
بعد از خواندن اطلاعات از ورودی و نوشتن آنها در خروجی، نوبت به بررسی چگونگی خواندن اطلاعات از فایل ویا پروندهی واقعی میرسد. به طور پیش فرض، پایتون توابع پایه و روشهای لازم برای کار با فایل و دستکاری[1] آنها را فراهم میکند. شما میتوانید اکثر دستکاریهای فایل را به وسیلهی یک شیِ فایل[2] انجامدهید.
[1]Manipulate [2]File Object
قبل از اقدام به خواندن و نوشتن فایل، بایستی آن را به وسیلهی تابع توکار ( ) open باز کنیم. این تابع، یک شی فایل را ایجاد میکند که برای فراخوانی سایر متدهای پشتیبانیشده و مرتبط با آن، مورد استفاده قرار میگیرد. شمای کلی این دستور، به شکل (16-4) میباشد.
حال به توضیح هر یک از پارامترهای این تابع میپردازیم.
نحوه استفاده از هر حالت در خلال مطالب بعدی توضیح داده خواهد شد.
[1] Appending
زمانی که یک پرونده باز شود، شما یک شی فایل دارید که میتوانید اطلاعات مختلفی را راجع به آن به دست آورید. در شکل (16-6)، لیستی از این ویژگیها را مشاهده مینمایید.
برای درک بهتر مطالب، شکل (16-7) را داریم.
نتیجهی اجرای این مثال را در شکل (16-8) مشاهده میکنید.
این متد، تمامی اطلاعاتی که تغییر یافته ولی در فایل نوشته نشدهاند را خالیکرده و شی فایل را میبندد. پس از اجرای این دستور، تا بازکردن مجدد فایل، هرگونه امکان نوشتن از آن گرفته میشود. پایتون به طور خودکار، مرجع هر فایلی که به فایل دیگری منتقل شدهاست را میبندد. در این رابطه، شکل (16-9)، مثال سادهای را بیان میکند. همان گونه که مشاهده مینمایید، این دستور، بعد از چاپ نام فایل، آن را میبندد.
برای راحتی کار، هر شی فایل، مجموعهای از روشهای دسترسی را فراهم میکند. در ادامه، روش استفاده از هر دو متد را به صورت مجزا بررسی خواهیمکرد.
16-7-1- متد Write
این متد، رشتهی مدنظر را در یک فایلِ باز مینویسد. توجه داشتهباشید که در پایتون، رشتهها میتوانند علاوه بر متن، حاوی دادههای باینری نیز باشند. البته این متد نمیتواند کاراکتر خط جدید یعنی "n\" را به انتهای متن اضافهکند. شکل (16-10)، متن دلخواه موجود در پارامتر ارسالشده را در فایل باز شده، مینویسد.
با اجرای این مثال، در ابتدا، فایل foo.txt ایجاد میشود. حال محتوای ارسالی، در فایل نوشتهشده و فایل را میبندد. اگر شما فایل را باز کنید، محتوای شکل (16-11) را خواهیددید.
16-7-2- متد Read
این متد، یک رشته را از فایل بازشده، میخواند. همانند متد write، رشتههای پایتون میتوانند حاوی دادههای باینری نیز باشند. پارامتر ارسالی متد، تعداد بایتهایی است که از ابتدای فایل باز شده، خوانده میشود. اگر پارامتری برای آن ارسال نشود، این متد سعی میکند تا حد امکان، اطلاعات داخل فایل را بخواند. این کار میتواند حداکثر تا پایان فایل ادامهیابد. شکل (16-12)، مثالی را در مورد عملکرد آن بیان میکند.
در این مثال، از فایل ایجادشده در شکل (16-12)، استفادهکرده و 9 کاراکتر اول آن را برمیگردد. نتیجه اجرای این قطعه کد را در شکل (16-13) مشاهده میکنید.
متد tell مکان کنونی خط فرمان را در فایل نشان میدهد. به عبارت دیگر، خواندن و نوشتن دادهی بعدی، به تعداد بایتهای تعیینشده، از ابتدای آن موقعیت را برمیگرداند.
متد seek(offset[, from]) مکان خط فرمان در فایل بازشده را تغییر میدهد. آرگومان offset نمایانگر تعداد بایتهایی است که بایستی منتقلشوند. آرگومان from نیز، مکان مرجع را از محل بایتهای انتقالی، مشخص میکند. اگر مقدار صفر برای from تعیینشود، به این معنیاست که از ابتدای فایل، به عنوان مرجع استفاده میکند. مقدار 1، معادل استفاده از مکان کنونی، برای مرجع است. همچنین اگر مقدار آن را، 2 درنظر بگیرید، انتهای فایل را به عنوان مکان مرجع انتخاب میکند. با فرض استفاده از فایل foo.txt ، مثال شکل (16-14) را خواهیمداشت.
نتیجهی اجرای این مثال بهصورت شکل (16-15) خواهدبود.
ماژول OS در پایتون، متدهایی را ارائه میدهد تا به وسیلهی آنها، اقدام به انجام انواع عملیات پردازش فایل، از جمله تغییر نام و حذف فایلها نمایید. برای استفاده از این ماژول و فراخوانی توابع مربوطه، ابتدا باید آن را import کنید. در ادامه به بررسی هر یک از این متدها میپردازیم.
16-9-1 متد Rename
این متد، نام فعلی و نامی که میخواهید فایل به آن تغییریابد را به عنوان آرگومان، از شما میگیرد. شکل (16-16) مثالی از کاربرد متد مذکور را نشان میدهد.
با اجرای این مثال، نام فایل test1.txt به test2.txt تغییر مییابد.
16-9-2- متد Remove
تنها آرگومانی که این متد نیاز دارد، نام فایلی است که میخواهیم آن را حذفکنیم. برای مثال، در شکل (16-17) قصد داریم، فایل test2.txt را از محل پوشه ویا دایرکتوری (بعد از این تنها از کلمهی دایرکتوری استفاده میکنیم) جاری حذفنماییم.
به طور معمول، در هر سیستم عامل، فایلها داخل دایرکتوریهای متعددی قرار میگیرند. پایتون نیز همانند سایر زبانها، متدها و راهکارهایی را برای مدیریت آنها فراهم نمودهاست. البته برای انجام عملیات مختلف از جمله ایجاد، حذف و تغییر نام دایرکتوری، بایستی ابتدا ماژول OS را واردکنیم. در ادامه، این متدها را بررسی میکنیم.
16-10-1- متد MkDir
شما میتوانید از این متد، برای ایجاد دایرکتوری در داخل دایرکتوری فعلی استفادهکنید. برای این کار کافیاست، نام دلخواه را به عنوان آرگومان این متد وارد کنید. شکل (16-18)، مثالی را از ایجاد دایرکتوری به نام test ارائه میدهد.
16-10-2- متد ChDir
میتوان از این متد، برای تغییر دایرکتوری فعلی استفادهکرد. برای این کار، بایستی مسیر دایرکتوری مدنظر را به عنوان آرگومان وارد نمود. نحوهی عملکرد متد مذکور را در شکل (16-19) میبینید.
16-10-3- متد GetCwd
با این متد، میتوان مسیر دایرکتوری جاری را به دست آورد. در شکل (16-20) نحوهی استفاده از آن را مشاهده میکنید.
16-10-4- متد RmDir
با ورود مسیر دایرکتوری مدنظر، به عنوان آرگومان ورودی، میتوان آن دایرکتوری را حذفکرد. البته قبل از حذف، بایستی تمامی فایلهای موجود در داخل آن، حذفشوند. نمونهای از این مطلب را در شکل (16-21) میبینید. اگر مسیر و نام دقیق دایرکتوری را وارد نکنید، این تابع، تنها در داخل دایرکتوری جاری، به دنبال آن خواهدگشت.
در این فصل سعیکردیم در مورد کار با فایل و دایرکتوری، مطالب کاربردی را ارائهداده و از ذکر مطالب پیچیدهتر در مورد File Object و OS Object اجتنابکنیم. مطالعهی بیشتر در این موضوع را به خواننده واگذار مینماییم.
در پست بعدی به مدیریت خطاها خواهیم پرداخت. با ما همراه باشین.