عملیات ورودی/خروجی در برنامه نویسی پایتون 

4 سال پیش
عملیات ورودی/خروجی در برنامه نویسی پایتون 

عملیات ورودی/خروجی در برنامه نویسی پایتون 

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، با عملیات ورودی/خروجی در برنامه نویسی پایتون (Python File I/O) آشنا خواهید شد. به طور خاص ، باز کردن یک فایل، خواندن آن، نوشتن در آن، بستن آن ، و روش های مختلف فایل که باید از آنها آگاهی داشته باشید.

پیشنهاد ویژه : آموزش طراحی وب سایت با پایتون

 

فایل ها در پایتون

برای ذخیره اطلاعات مربوط به فایل ها، مکانهایی بر روی دیسک نامگذاری شده اند. آنها برای ذخیره دائمی داده ها در یک حافظه غیر فرار (به عنوان مثال دیسک سخت) استفاده می شوند.

از آنجا که حافظه دسترسی تصادفی (RAM) فرار است (که با خاموش شدن رایانه، داده های خود را از دست می دهد) ، با ذخیره دائمی آنها، از فایل ها برای استفاده در آینده از داده ها استفاده می کنیم.

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

از این رو در پایتون یک عملیات فایل به ترتیب زیر انجام می شود:

  1. پرونده ای را باز کنید
  2. خواندن یا نوشتن (انجام عملیات)
  3. پرونده را ببندید

 

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

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

>>> f = open("test.txt")    # open file in current directory
>>> f = open("C:/Python38/README.txt")  # specifying full path

 

ما می توانیم حالت را هنگام باز کردن یک پرونده مشخص کنیم. در حالت ،به عنوان مثال می خواهیم r را بخوانیم، w را بنویسیم یا a را به پرونده اضافه کنیم. همچنین می توانیم تعیین کنیم که آیا می خواهیم پرونده را در حالت متن یا حالت باینری باز کنیم.

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

از طرف دیگر، حالت باینری بایت را برمی گرداند و این مدی است که هنگام کار با پرونده های غیر متنی مانند تصاویر یا فایلهای اجرایی استفاده می شود.

حالت توضیحات
r فایلی را برای خواندن باز می کند. (پیش فرض)
w پرونده ای را برای نوشتن باز می کند. اگر پرونده ای وجود نداشته باشد، پرونده جدیدی ایجاد می کند یا در صورت وجود پرونده را کوتاه می کند.
x فایلی را برای ایجاد انحصاری باز می کند. اگر پرونده از قبل وجود داشته باشد، عملیات ناموفق است.
a فایلی را برای ضمیمه در انتهای پرونده بدون کوتاه کردن آن باز می کند. در صورت عدم وجود یک پرونده جدید ایجاد می کند.
t در حالت متن باز می شود. (پیش فرض)
b در حالت باینری باز می شود.
+ پرونده ای را برای به روزرسانی (خواندن و نوشتن) باز می کند

 

f = open("test.txt")      # equivalent to 'r' or 'rt'
f = open("test.txt",'w')  # write in text mode
f = open("img.bmp",'r+b') # read and write in binary mode

 

برخلاف سایر زبانها، کاراکتر a تا زمان رمزگذاری با استفاده از ASCII (یا سایر رمزگذاری های معادل)، عدد ۹۷ را القا نمی کند.

علاوه بر این، رمزگذاری پیش فرض به پلت فرم بستگی دارد. در ویندوز cp1252 است اما در لینوکس utf-8 است.

بنابراین، ما همچنین نباید به رمزگذاری پیش فرض اعتماد کنیم وگرنه کد ما در سیستم عامل های مختلف رفتار متفاوتی خواهد داشت.

از این رو، هنگام کار با پرونده ها در حالت متن ، توصیه می شود نوع رمزگذاری را مشخص کنید.


f = open("test.txt", mode='r', encoding='utf-8')f = open("test.txt", mode='r', encoding='utf-8')

 

بستن فایل ها در پایتون

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

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

f = open("test.txt", encoding = 'utf-8')
# perform file operations
f.close()

 

بستن فایل ها در پایتون با این روش کاملاً ایمن نیست. اگر هنگام انجام عملیات اتفاقی رخ دهد، کد بدون بسته شدن فایل خارج می شود.

یک روش ایمن تر، استفاده از بلوک try…finally است.

try:
   f = open("test.txt", encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

 

به این ترتیب، ما تضمین می کنیم حتی اگر استثنایی رخ دهد که باعث توقف جریان برنامه شود، فایل به درستی بسته می شود.

بهترین راه برای بستن یک فایل استفاده از دستور with است.

همچنین دبگر نیازی نیست که روش () close را فراخوانی کنیم. به صورت داخلی انجام می شود.

with open("test.txt", encoding = 'utf-8') as f:
   # perform file operations

 

 

نوشتن فایل در پایتون

برای نوشتن یک فایل در پایتون، باید از حالت نوشتن w استفاده کنیم، یا برای ایجاد یک فایل جدید و منحصر به فرد از حالت x استفاده می کنیم.

ما باید در مورد حالت w مراقب باشیم، زیرا اگر این پرونده از قبل وجود داشته باشد، پرونده را بازنویسی می کند. به همین دلیل تمام داده های قبلی پاک می شوند.

نوشتن یک رشته یا دنباله بایت (برای پرونده های باینری) با استفاده از متد () write انجام می شود. این روش تعداد کاراکتر های نوشته شده در پرونده را برمی گرداند.

with open("test.txt",'w',encoding = 'utf-8') as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n")

 

این برنامه در صورت عدم وجود پرونده جدیدی به نام test.txt در فهرست فعلی ایجاد می کند. اگر وجود داشته باشد، بازنویسی می شود.

ما باید کاراکتر های خط جدید را خودمان قرار دهیم تا خطوط مختلف را از هم تشخیص دهیم.

 

خواندن فایلها در پایتون

برای خواندن یک فایل در پایتون، باید پرونده را در حالت خواندن r باز کنیم.

روشهای مختلفی برای این منظور در دسترس است. ما می توانیم از روش (read (size برای خواندن تعداد داده استفاده کنیم. اگر پارامتر size مشخص نشده باشد، تا پایان پرونده خوانده شده و برمی گردد.

ما می توانیم فایل text.txt را که در بخش بالا نوشتیم به روش زیر بخوانیم:

>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4)    # read the first 4 data
'This'

>>> f.read(4)    # read the next 4 data
' is '

>>> f.read()     # read in the rest till end of file
'my first file\nThis file\ncontains three lines\n'

>>> f.read()  # further reading returns empty sting
''

 

می توانیم ببینیم که متد() read خط جدیدی را به عنوان ‘\ n’ برمی گرداند. پس از رسیدن به پایان فایل، با خواندن بیشتر یک رشته خالی دریافت می کنیم.

می توانیم مکان نما (موقعیت) فایل فعلی خود را با استفاده از روش ()seek تغییر دهیم. به همین ترتیب، متد () tell موقعیت فعلی ما را برمی گرداند (به تعداد بایت).

>>> f.tell()    # get the current file position
۵۶

>>> f.seek(0)   # bring file cursor to initial position
۰

>>> print(f.read())  # read the entire file
This is my first file
This file
contains three lines

 

ما می توانیم یک فایل را خط به خط با استفاده از حلقه for بخوانیم. این کار هم کارآمد است و هم سریع.

>>> for line in f:
...     print(line, end = '')
...
This is my first file
This file
contains three lines

 

در این برنامه، خطوط موجود در پرونده شامل یک کاراکتر خط جدید \ n است. بنابراین، از پارامتر انتهایی تابع ()print استفاده می کنیم تا هنگام چاپ از دو خط جدید جلوگیری کنیم.

متناوباً، می توانیم از روش ()readline برای خواندن سطرهای جداگانه یک پرونده استفاده کنیم. این روش یک فایل را تا خط جدید، از جمله کاراکتر خط جدید می خواند.

>>> f.readline()
'This is my first file\n'

>>> f.readline()
'This file\n'

>>> f.readline()
'contains three lines\n'

>>> f.readline()
''

 

سرانجام، روش ()readlines لیستی از خطوط باقیمانده کل پرونده را برمی گرداند. تمام این روشهای خواندن با رسیدن به انتهای پرونده (EOF) مقادیر خالی را برمی گردانند.

>>> f.readlines()
['This is my first file\n', 'This file\n', 'contains three lines\n']

 

 

متد های فایل در پایتون

متد های مختلفی با شی فایل در دسترس است. برخی از آنها در مثالهای بالا استفاده شده است.

در اینجا لیست کاملی از روش ها در متن با شرح مختصر آورده شده است:

Method Description
()close فایل باز شده را می بندد. اگر فایل از قبل بسته باشد، تأثیری نخواهد داشت.
()detach بافر اصلی باینری را از TextIOBase جدا کرده و برمی گرداند.
()fileno یک عدد صحیح (توصیف کننده فایل) فایل را برمی گرداند.
()flush بافر نوشتن جریان فایل را روشن می کند.
()isatty اگر جریان فایل تعاملی باشد، Trueبرمی گردد.
(read(n حداکثر n کاراکتر از فایل را می خواند. در صورت منفی یا خالی بودن فایل، تا پایان فایلخوانده می شود.
()readable اگر جریان فایل از روی آن قابل خواندن باشد، True برمی گردد.
(readline(n=-1 یک خط از فایل را می خواند و برمی گرداند. در صورت تعیین حداکثر n بایت می خواند.
(readlines(n=-1 لیستی از سطرهای فایل را می خواند و برمی گرداند. در صورت تعیین حداکثر n بایت / کاراکتر را می خواند.
(seek(offset,from=SEEK_SET موقعیت فایل را به افست بایت تغییر می دهد، با توجه به (شروع، جریان، پایان).
()seekable اگر جریان فایل از دسترسی تصادفی پشتیبانی کند، Trueبرمی گردد.
()tell مکان فایل فعلی را برمی گرداند.
(truncate(size=None جریان فایل را به اندازه بایت تغییر اندازه می دهد. اگر اندازه مشخص نشده باشد، اندازه را به مکان فعلی تغییر دهید.
()writable اگر جریان فایل قابلیت نوشتن، داشته باشد، True برمی گردد.
(write(s رشته s را در فایل می نویسد و تعداد کاراکترهای نوشته شده را برمی گرداند.
(writelines(lines لیستی از خطوط موجود در فایل را می نویسد.

 

منبع.

لیست جلسات قبل آموزش برنامه نویسی پایتون

  1. آموزش نصب و اجرای برنامه نویسی پایتون
  2. کلیدواژه ها و شناسه های برنامه نویسی پایتون
  3. دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
  4. متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون 
  5. انواع داده ها در برنامه نویسی پایتون
  6. تبدیل نوع در برنامه نویسی پایتون
  7. ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
  8. عملگرها در برنامه نویسی پایتون
  9. نام و دامنه در برنامه نویسی پایتون
  10. دستور شرطی if…else در برنامه نویسی پایتون
  11. حلقه for در برنامه نویسی پایتون
  12. حلقه while در برنامه نویسی پایتون
  13. دستورات break و continue در برنامه نویسی پایتون
  14. دستور pass در برنامه نویسی پایتون
  15. توابع در برنامه نویسی پایتون
  16. آرگومان تابع در برنامه نویسی پایتون
  17. تابع بازگشتی در برنامه نویسی پایتون
  18. تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
  19. متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
  20. کلیدواژه global در برنامه نویسی پایتون
  21. ماژول های برنامه نویسی پایتون
  22. پکیج ها در برنامه نویسی پایتون
  23. اعداد و تبدیل نوع داده در برنامه نویسی پایتون 
  24. لیست در برنامه نویسی پایتون
  25. تاپل در برنامه نویسی پایتون 
  26. رشته ها در برنامه نویسی پایتون
  27. مجموعه ها در برنامه نویسی پایتون
  28. دیکشنری در برنامه نویسی پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه