فصل شانزدهم آموزش پایتون مقدماتی - فایل و دایرکتوری

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