تبلیغات

دوره H پایتون – فصل 4: استثناها و فایلها – درس 4: کار با فایلها

دوره H پایتون

دوره H برنامه نویسی پایتون
فصل چهارم: استثناها و فایل ها در پایتون
درس چهارم: کار با فایل ها در پایتون


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

در این درس می‌خواهیم نحوه‌ی کار با فایل‌ها را یاد بگیریم. یعنی بتوانیم فایلی را باز کرده و محتوایش را بخوانیم، در آن تغییر دهیم و موارد دیگر …! 🙂

1. باز کردن فایل در پایتون

طبیعتا فایل‌های متنی برای دستکاری، ساده‌تر هستند. قبل از اینکه بتوان داخل فایلی چیزی نوشت و یا آن را تغییر داد، ابتدا بایستی آن را باز کرد؛ که این کار در پایتون، توسط تابع open انجام می‌شود. بصورت زیر:

فایلی با نام finename.txt، از حافظه باز شده و در متغیر myfile قرار می‌گیرد. حالا از طریق myfile می‌توان با این فایل کار کرد. 🙂

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

تعیین مد یا حالت باز کردن فایل

می‌توان حالت باز شدن یک فایل را، با تعیین پارامتر دوم تابعِ open مشخص کرد. این حالت، می‌تواند شامل مقادیر زیر باشد:

  • “r”: فایل را در حالت فقط خواندنی باز می‌کند؛ که حالت پیشفرض است.
  • “w”: فایل را در حالت فقط نوشتنی باز می‌کند؛ یعنی بتوان محتوای درون آن را تغییر داد.
  • “a”: فایل را در حالت append باز می‌‍کند؛ بدین معنا که می‌توان محتوای جدیدی را به انتهای آن اضافه کرد. (همانند نوشتن است ولی کل محتوای فایل را تغییر نمی‌دهد)
  • “b”: فایل را در حالت باینری باز می‌کند؛ که برای فایل‌های غیرمتنی استفاده می‌شود. (مانند تصاویر و فایل‌های صوتی)

برای مثال:

در حالت wb، یعنی اینکه فایل را بصورت باینری باز کند بعلاوه اینکه بتوان محتوای آن را تغییر داد!

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

بستن فایل باز شده

پس از اینکه فایلی را باز کردیم و از آن استفاده نمودیم، بایستی حتما آن را ببندیم تا منابع سیستم آزاد شود. این کار توسط متد close انجام می‌گیرد:

2. خواندن فایل در پایتون

پس از باز کردن فایل، می‌توان محتوای آن را خواند! البته اگر فایل با چنین حالتی باز شده باشد. 🙂

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

این کد، تمامی محتوای فایل را در متغیر cont ریخته و سپس آن را پرینت می‌کند. 😐

خواندن بخشی از فایل

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

شما می‌توانید مقدارهای بیشتری از فایل را با فراخوانی مکرر read پشت سرهم و بصورت بایت بایت بخوانید (یعنی هربار، از بقیه‌ی مقداری که مانده به شما برگردانده می‌شود). و اگر در نهایت این متد را بدون مقدار فراخوانی کنید، بقیه محتوای فایل تا انتها برایتان برگردانده می‌شود!

نکته
اگر مقدار منفی ارسال کنید، درست همانند حالت بدون مقدار رفتار کرده و کل محتوا را برمی‌گرداند.

پس از خواندن فایل

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

خروجی:

خط به خط در لیست

برای اینکه محتوای فایل خوانده شده (در صورت متنی بودن) بصورت خط به خط در یک لیست قرار گرفته و برگدانده شود، می‌توان از متد readlines استفاده کرد. مثلا بصورت زیر:

خروجی می‌تواند به شکل زیر باشد:


همچنین می‌توان از یک حلقه‌ی for، برای پیمایش خطوط استفاده کرد:

خروجی می‌تواند به شکل زیر باشد:

نکته
در خروجی، خطوط توسط یک خط بصورت جای‌خالی از هم جدا شده‌اند! زیرا تابع print، بصورت خودکار یک خط جدید به انتهای خود اضافه می‌کند و از آنجایی که خود خطوط نیز شامل کاراکتر شکستن خط در انتهای خود هستند و این باعث ایجاد دو خط در انتهای هر کدام از خطوط در خروجی می‌شود. 🙂

3. نوشتن فایل‌ها

همیشه قرار نیست فایل خوانده شود و گاهی نیاز است که محتوایی درون آن نوشته شود! بدین منظور، از متد write استفاده می‌شود. مثلا بصورت زیر:

خروجی:

در اینجا، کد نوشته شده اصلا کاری به این ندارد که چه چیزی قبلا در فایل قرار داشته باشد! بلکه محتوای ارسال شده برای متد write را به صورت کامل داخل آن می‌نویسد!

نکته
حالت w باعث می‌شود که اگر فایل مورد نظر جهت باز شدن وجود نداشت، ایجاد شود.

همانطور که گفته شد، وقتی فایل در حالت نوشتن باز شود، محتوای داخل آن نیز پاک می‌شود! برای مثال:

خروجی:

در این مثال می‌بینید که محتوای فایل جایگزین شده است! 🙂

خروجی متد write

متد write، در صورت موفقیت آمیز بودن، تعداد بایت نوشته شده را برمی‌گرداند.

خروجی:

نکته
برای نوشتن هرچیز دیگری به جز رشته‌ها، ابتدا باید آن را به رشته تبدیل کرد!

4. اطمینان از بسته شدن فایل

قبلا در try except، گفتیم که یکی از کاربردهای finally، این است که از بسته شدن فایل‌ها اطمینان داشته باشیم. چراکه وقتی کارمان با یک فایل تمام شد، بهتر است آن را ببندیم تا منابع سیستم آزاد شوند و از آنجایی که finally چه خطا رخ بدهد و چه ندهد در هرصورت اجرا می‌شود، بنابراین جای مناسبی است. برای مثال:

بنابراین در اینجا، فایل چه خطا رخ بدهد و چه ندهد، بسته خواهد شد. 🙂

راه جایگزین

راه دیگری برای این کار وجود دارد که از finally استفاده نکنیم! و آن راه استفاده از دستور with و as بصورت زیر می‌باشد:

در اینجا، فایل در متغیر f قرار گرفته است و خود به خود پس از اتمام کار، بسته خواهد شد. همچنین کد بایستی در بدنه‌ی with نوشته شود.

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

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس و دانشجوی ارشد رشته شبیه‌ساز هوشمند - در حال نوشتن یه رمان (اگه خدا بخواد و تموم شه 😁)

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه