فایل ها

فایل مجموعه ای از داده ها در حافظه خارجی است که دارای نام است. 

دو نوع فایل در پایتون وجود دارد:
- متن، که حاوی متن شکسته شده در یک خط است. از نویسه‌های ویژه در فایل‌های متنی، فقط می‌توان نویسه‌های خط جدید ("\n") و بازگشت به ابتدای خط ("\r" وجود داشته باشد. ;)؛
- دودویی، که هرگونه داده باینری را بدون محدودیت (به عنوان مثال، تصاویر، صداها، ویدئوها و غیره) ذخیره می‌کند.

در مرحله بعد، کار با فایل های متنی را در نظر خواهیم گرفت.

 

اصل کار با یک فایل از برنامه
شامل سه مرحله است:
1. باز کردن یک فایل؛
2. کار با فایل؛
3. بستن فایل.
این اصل عملکرد "اصل ساندویچ" نامیده می شود..

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

تابع open() به اجازه می دهد تا یک فایل را باز کند و یک متغیر فایل را برمی گرداند که می توان از آن برای دسترسی به فایل استفاده کرد.
f = open(نام_پرونده، حالت_دسترسی)، 
جایی که:
- file_name - نام فایلی که باید باز شود
- access_mode - حالت باز کردن فایل. این می تواند این باشد: خواندن، نوشتن، و غیره. حالت پیش فرض خواندن (r) است، مگر اینکه طور دیگری مشخص شده باشد. 
 
لیست کامل حالت های باز کردن فایل
<سر> <بدن>
حالت توضیح
r فقط خواندنی.
w فقط قابل نوشتن. اگر با نام مشخص شده یافت نشد، فایل جدیدی ایجاد می شود.
rb فقط خواندنی (دودویی).
wb فقط نوشتن (باینری). اگر با نام مشخص شده یافت نشد، فایل جدیدی ایجاد می شود.
r+ برای خواندن و نوشتن.
rb+ برای خواندن و نوشتن (دودویی).
w+ برای خواندن و نوشتن. اگر با نام مشخص شده یافت نشود، فایل قابل نوشتن جدیدی ایجاد می کند.
wb+ برای خواندن و نوشتن (دودویی). اگر با نام مشخص شده یافت نشود، فایل قابل نوشتن جدیدی ایجاد می کند.
a برای افزودن محتوای جدید باز می شود. اگر با نام مشخص شده یافت نشود، فایل قابل نوشتن جدیدی ایجاد می کند.
a+ برای افزودن محتوای جدید باز می شود. اگر با نام مشخص شده یافت نشد، فایل جدیدی برای خواندن ورودی ایجاد می کند.
ab برای افزودن محتوای جدید (باینری) باز می شود. اگر با نام مشخص شده یافت نشود، فایل قابل نوشتن جدیدی ایجاد می کند.
ab+ برای افزودن محتوای جدید (باینری) باز می شود. اگر با نام مشخص شده یافت نشد، فایل جدیدی برای خواندن ورودی ایجاد می کند.

 
روش close() به شما امکان می دهد یک فایل را ببندید.

مثال
Fin = open ("input.txt") Fout = باز ("output.txt")    # با فایل ها کاری انجام دهید fout.close() Fin.close() اگر فایل موجود برای نوشتن باز شود، محتویات آن از بین می رود. پس از پایان برنامه، تمام فایل های باز به طور خودکار بسته می شوند.
 

خواندن داده ها از یک فایل

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

خواندن یک خط از یک فایل به روش readline() اجازه می دهد تا اجرا شود. این روش بر روی یک متغیر فایل فراخوانی می شود. Fin = open ("input.txt") s = Fin.readline()
روش‌های مختلفی را می‌توان برای رشته خواندن اعمال کرد، مشابه روش‌هایی که هنگام خواندن از صفحه کلید استفاده می‌شود (split()، map() و غیره). به عنوان مثال، اگر دو عدد در یک خط از یک فایل با یک فاصله از هم جدا شده باشند، می توانید آنها را به صورت زیر بشمارید: Fin = open ("input.txt") s = Fin.readline().split() # split line در فضاهای s = ["2007"، "2021"] a, b = map(int, s)         # متد int() را برای همه عناصر لیست s اعمال کنید،   # یعنی رشته کاراکتر را به عدد تبدیل کنید # a، b = int(s[0]، s[1])   # این همان خط بالا است # a, b = [int(x) برای x در s] # مشابه یک مولد
متد read() کل محتویات فایل را می خواند و رشته ای را برمی گرداند که ممکن است حاوی کاراکترهای '\n' باشد. اگر یک پارامتر عدد صحیح به متد read() داده شود، بیش از تعداد مشخص شده کاراکتر خوانده نخواهد شد. برای مثال، می‌توانید بایت به بایت یک فایل را با استفاده از روش read(1) بخوانید.
.
هنگامی که یک فایل باز می شود، اشاره گر که مکان فعلی فایل را تعیین می کند، در ابتدای فایل تنظیم می شود و هنگام خواندن، به موقعیت پس از خواندن داده ها منتقل می شود. هنگام نوشتن، اشاره گر به موقعیت آزاد بعدی منتقل می شود.

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

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

 

فایل های چند خطی

هنگام کار با فایل های چند خطی، باید بدانید که چه زمانی داده های موجود در فایل تمام می شود. برای انجام این کار، می‌توانید از ویژگی روش‌های readline() استفاده کنید: اگر مکان‌نمای فایل به انتهای فایل اشاره کند، متد readline() یک عدد را برمی‌گرداند. رشته خالی، که به عنوان یک مقدار بولی نادرست درک می شود: در حالی که درست است:     s = Fin.readline()     اگر نه s: شکستن   # اگر هنگام خواندن یک رشته یک رشته خالی دریافت شود،   # حلقه با یک عبارت break به پایان می رسد     print(s, end="")  # خط جدید را غیرفعال کنید، زیرا هنگام خواندن یک خط از یک فایل                       # کاراکتر خط جدید "\n" ذخیره شده

 

راه های دیگر برای خواندن داده ها از فایل های چند خطی
1. بلافاصله تمام داده های موجود در لیست. Fin = open ("input.txt") list_strings = Fin.readlines()    # همه خطوط را یکجا بخوانید Fin.close() برای s در list_strings:     print(s, end="")
2. استفاده از ساختار with-as. در این حالت فایل پس از پایان چرخه به طور خودکار بسته می شود. با open("input.txt") به عنوان Fin:     برای s در فین:         print(s, end="") این ساختار بسته شدن فایل را تضمین می کند. 


3. روشی برای تکرار روی رشته ها به سبک زبان پایتون (توصیه می شود از این روش استفاده کنید). در این صورت فایل نیز به صورت خودکار بسته می شود. برای s در open("input.txt"):     print(s, end="")

پرونده سیریلیک

اگر فایل حاوی حروف روسی (هر کاراکتری با کد بیشتر از 127) باشد، باید رمزگذاری را هنگام باز کردن مشخص کنید. data = open("input.txt", "r", encoding="utf-8")