داریوش مهدی پور یقینی
داریوش مهدی پور یقینی
خواندن ۸ دقیقه·۲ سال پیش

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

سلام دوستان

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

https://virgool.io/@mahdi.abbaspour.sh

این فصل از کتاب، تمامی توابع اولیه I/O‌‌[1] موجود در پایتون را پوشش می‌‌دهد. البته برای کسب اطلاعات بیشتر در مورد این نوع توابع، می‌‌توانید به اسناد استاندارد پایتون مراجعه‌‌نمایید.

[1]Input/Output

16-1- چاپ در صفحه نمایش

همان طوری که از قبل می‌‌دانیم، ساده‌‌ترین راه برای تولید خروجی، استفاده از دستور print است که در آن می‌‌توانید عبارات دلخواه خود را با کاما از هم جدا‌‌کنید. این تابع به طور خودکار هر چیزی را که در آن وارد می‌‌کنیم، به یک رشته تبدیل‌‌کرده و نتایج را همانند شکل (16-1)، به صورت استاندارد در خروجی ظاهر می‌‌کند. البته اگر هیچ عبارتی به عنوان ورودی نداشته‌‌باشیم، مقدار خالی را در خروجی خواهیم‌‌داشت.

شکل (16-1)
شکل (16-1)

16-2- خواندن ورودی صفحه کلید

زبان پایتون، تابع توکار Raw_Input را برای خواندن یک خط متن از ورودی استاندارد (به طور پیش فرض، صفحه کلید)، فراهم می‌‌کند. ما در ادامه به توضیح این توابع می‌‌پردازیم.

تابع مذکور، یک خط (اتمام با کلید Enter) را از کاربر دریافت‌‌کرده و آن را به عنوان یک رشته برمی‌‌گرداند. البته علامت خط جدیدی که در انتهای این ورودی وجود ‌‌دارد را حذف می‌‌کند. نمونه‌‌ای از کاربرد آن را در شکل (16-2) می‌‌بینید. گفتنی‌‌است که این تابع در پایتون نسخه2 کاربرد دارد. در نسخه‌‌های جدیدتر، این تابع را به ( ) input تغییر نام دادند.

شکل (16-2)
شکل (16-2)

با اجرای این قطعه کد، از کاربر درخواست می‌‌شود که رشته‌‌ی دلخواه خود را وارد کند. در نهایت رشته‌‌ی وارده به همراه عبارت موجود در دستور چاپ، در خروجی ظاهر می‌‌شود. با فرض این که کاربر عبارت "Hello Python" را وارد کند، ورودی و خروجی ما به شکل (16-3) خواهدشد.

شکل (16-3)
شکل (16-3)

16-3- باز و بسته کردن فایل

بعد از خواندن اطلاعات از ورودی و نوشتن آن‌‌ها در خروجی، نوبت به بررسی چگونگی خواندن اطلاعات از فایل ویا پرونده‌‌ی واقعی می‌‌رسد. به طور پیش فرض، پایتون توابع پایه و روش‌‌های لازم برای کار با فایل و دستکاری[1] آن‌‌ها را فراهم می‌‌کند. شما می‌‌توانید اکثر دستکاری‌‌های فایل را به وسیله‌‌ی یک شیِ فایل[2] انجام‌‌دهید.

[1]Manipulate [2]File Object

16-4- تابع Open

قبل از اقدام به خواندن و نوشتن فایل، بایستی آن را به وسیله‌‌ی تابع توکار ( ) open باز ‌‌کنیم. این تابع، یک شی فایل را ایجاد می‌‌کند که برای فراخوانی سایر متدهای پشتیبانی‌‌شده و مرتبط با آن، مورد استفاده قرار می‌‌گیرد. شمای کلی این دستور، به شکل (16-4) می‌‌باشد.

شکل (16-4)
شکل (16-4)

حال به توضیح هر یک از پارامترهای این تابع می‌‌پردازیم.

  • پارامتر file_name : یک مقدار رشته‌‌ای حاوی نام پرونده‌‌ای است که می‌‌خواهیم به آن دسترسی داشته‌‌باشیم.
  • پارامتر access_mode : برای تعیین حالت‌‌های دسترسی به فایل، مانند خواندن، نوشتن و افزودن کاربرد ‌‌دارد. البته در شکل (16-5)، لیست کاملی از مقادیر ممکن، ذکر می‌‌شود. همان گونه که در شمای کلی این تابع دیدید، استفاده از آن، اختیاری‌‌است. در هر حال، مقدار پیش فرض آن، "r" به معنی خواندن است.
  • پارامتر buffering : اگر مقدار این پارامتر، صفر در نظر گرفته‌‌شود، عمل بافر اتفاق نمی‌‌افتد. ولی اگر مقدار بافر، یک باشد، در هنگام دسترسی به فایل، دستور بافرکردن اجرا می‌‌شود. حال اگر مقدار بافر، عدد صحیح بزرگتر از یک باشد، عمل بافر، با اندازه‌‌ی تعیین‌‌شده انجام می‌‌شود. در نهایت، مقدار منفی، نمایانگر استفاده از مقدار پیش فرض سیستم برای بافرکردن است. این حالت، پیش فرض این پارامتر نیز درنظر گرفته می‌‌شود.
شکل (16-5)
شکل (16-5)

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

[1] Appending

16-5- ویژگی‌‌های شی فایل

زمانی که یک پرونده باز شود، شما یک شی فایل دارید که می‌‌توانید اطلاعات مختلفی را راجع به آن به دست آورید. در شکل (16-6)، لیستی از این ویژگی‌‌ها را مشاهده می‌‌نمایید.

شکل (16-6)
شکل (16-6)

برای درک بهتر مطالب، شکل (16-7) را داریم.

شکل (16-7)
شکل (16-7)

نتیجه‌‌ی اجرای این مثال را در شکل (16-8) مشاهده می‌‌کنید.

شکل (16-8)
شکل (16-8)

16-6- متد Close

این متد، تمامی اطلاعاتی که تغییر یافته ولی در فایل نوشته نشده‌‌اند را خالی‌‌کرده و شی فایل را می‌‌بندد. پس از اجرای این دستور، تا بازکردن مجدد فایل، هرگونه امکان نوشتن از آن گرفته می‌‌شود. پایتون به طور خودکار، مرجع هر فایلی که به فایل دیگری منتقل شده‌‌است را می‌‌بندد. در این رابطه، شکل (16-9)، مثال ساده‌‌ای را بیان می‌‌کند. همان گونه که مشاهده می‌‌نمایید، این دستور، بعد از چاپ نام فایل، آن را می‌‌بندد.

شکل (16-9)
شکل (16-9)

16-7- خواندن و نوشتن در فایل

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

16-7-1- متد Write

این متد، رشته‌‌ی مدنظر را در یک فایلِ باز می‌‌نویسد. توجه داشته‌‌باشید که در پایتون، رشته‌‌ها می‌‌توانند علاوه بر متن، حاوی داده‌‌های باینری نیز باشند. البته این متد نمی‌‌تواند کاراکتر خط جدید یعنی "n\" را به انتهای متن اضافه‌‌کند. شکل (16-10)، متن دلخواه موجود در پارامتر ارسال‌‌شده را در فایل باز شده، می‌‌نویسد.

شکل (16-10)
شکل (16-10)

با اجرای این مثال، در ابتدا، فایل foo.txt ایجاد می‌‌شود. حال محتوای ارسالی، در فایل نوشته‌‌شده و فایل را می‌‌بندد. اگر شما فایل را باز ‌‌کنید، محتوای شکل (16-11) را خواهیددید.

شکل (16-11)
شکل (16-11)

16-7-2- متد Read

این متد، یک رشته را از فایل بازشده، می‌‌خواند. همانند متد write، رشته‌‌های پایتون می‌‌توانند حاوی داده‌‌های باینری نیز باشند. پارامتر ارسالی متد، تعداد بایت‌‌هایی است که از ابتدای فایل باز ‌‌شده، خوانده می‌‌شود. اگر پارامتری برای آن ارسال نشود، این متد سعی می‌‌کند تا حد امکان، اطلاعات داخل فایل را بخواند. این کار می‌‌تواند حداکثر تا پایان فایل ادامه‌‌یابد. شکل (16-12)، مثالی را در مورد عملکرد آن بیان می‌‌کند.

شکل (16-12)
شکل (16-12)

در این مثال، از فایل ایجادشده در شکل (16-12)، استفاده‌‌کرده و 9 کاراکتر اول آن را برمی‌‌گردد. نتیجه اجرای این قطعه کد را در شکل (16-13) مشاهده می‌‌کنید.

شکل (16-13)
شکل (16-13)

16-8- موقعیت فایل

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

متد seek(offset[, from]) مکان خط فرمان در فایل بازشده را تغییر می‌‌دهد. آرگومان offset نمایانگر تعداد بایت‌‌هایی است که بایستی منتقل‌‌شوند. آرگومان from نیز، مکان مرجع را از محل بایت‌‌های انتقالی، مشخص می‌‌کند. اگر مقدار صفر برای from تعیین‌‌شود، به این معنی‌‌است که از ابتدای فایل، به عنوان مرجع استفاده می‌‌کند. مقدار 1، معادل استفاده از مکان کنونی، برای مرجع است. همچنین اگر مقدار آن را، 2 درنظر بگیرید، انتهای فایل را به عنوان مکان مرجع انتخاب می‌‌کند. با فرض استفاده از فایل foo.txt ، مثال شکل (16-14) را خواهیم‌‌داشت.

شکل (16-14)
شکل (16-14)

نتیجه­ی اجرای این مثال به‌‌صورت شکل (16-15) خواهدبود.

شکل (16-15)
شکل (16-15)

16-9- تغییر نام و حذف فایل

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

16-9-1 متد Rename

این متد، نام فعلی و نامی که می‌‌خواهید فایل به آن تغییریابد را به عنوان آرگومان، از شما می‌‌گیرد. شکل (16-16) مثالی از کاربرد متد مذکور را نشان می‌‌دهد.

شکل (16-16)
شکل (16-16)

با اجرای این مثال، نام فایل test1.txt به test2.txt تغییر می‌‌یابد.

16-9-2- متد Remove

تنها آرگومانی که این متد نیاز‌‌ دارد، نام فایلی است که می‌‌خواهیم آن را حذف‌‌کنیم. برای مثال، در شکل (16-17) قصد داریم، فایل test2.txt را از محل پوشه ویا دایرکتوری (بعد از این تنها از کلمه‌‌ی دایرکتوری استفاده می‌‌کنیم) جاری حذف‌‌نماییم.

شکل (16-17)
شکل (16-17)

16-10- کار با دایرکتوری

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

16-10-1- متد MkDir

شما می‌‌توانید از این متد، برای ایجاد دایرکتوری در داخل دایرکتوری فعلی استفاده‌‌کنید. برای این کار کافی‌‌است، نام دلخواه را به عنوان آرگومان این متد وارد ‌‌کنید. شکل (16-18)، مثالی را از ایجاد دایرکتوری به نام test ارائه می‌‌دهد.

شکل (16-18)
شکل (16-18)

16-10-2- متد ChDir

می‌‌توان از این متد، برای تغییر دایرکتوری فعلی استفاده‌‌کرد. برای این کار، بایستی مسیر دایرکتوری مدنظر را به عنوان آرگومان وارد ‌‌نمود. نحوه‌‌ی عملکرد متد مذکور را در شکل (16-19) می‌‌بینید.

شکل (16-19)
شکل (16-19)

16-10-3- متد GetCwd

با این متد، می‌‌توان مسیر دایرکتوری جاری را به دست آورد. در شکل (16-20) نحوه‌‌ی استفاده از آن را مشاهده می‌‌کنید.

شکل (16-20)
شکل (16-20)

16-10-4- متد RmDir

با ورود مسیر دایرکتوری مدنظر، به عنوان آرگومان ورودی، می‌‌توان آن دایرکتوری را حذف‌‌کرد. البته قبل از حذف، بایستی تمامی فایل‌‌های موجود در داخل آن، حذف‌‌شوند. نمونه‌‌ای از این مطلب را در شکل (16-21) می‌‌بینید. اگر مسیر و نام دقیق دایرکتوری را وارد ‌‌نکنید، این تابع، تنها در داخل دایرکتوری جاری، به دنبال آن خواهد‌‌گشت.

شکل (16-21)
شکل (16-21)

در این فصل سعی‌‌کردیم در مورد کار با فایل و دایرکتوری، مطالب کاربردی را ارائه‌‌داده و از ذکر مطالب پیچیده‌‌تر در مورد File Object و OS Object اجتناب‌‌کنیم. مطالعه‌‌ی بیشتر در این موضوع را به خواننده واگذار می‌‌نماییم.



در پست بعدی به مدیریت خطاها خواهیم پرداخت. با ما همراه باشین.

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