در این قسمت آموزش خواندن یک فایل متنی و همچنین ایجاد و نوشتن یک فایل متنی را مطالعه میکنید.

خواندن یک فایل متنی

کد زیر را اجرا کنید(میتوانید آنرا در یک فایل پایتون بنویسید و با مفسر اجرا کنید یا اینکه مستقیماً آن را در مفسر وارد کرده و اجرا کنید.) توجه کنید که FILE_PATH را باید با مسیر یک فایل متنی جایگزین کنید.

fs = open('FILE_PATH', 'tr')
s = fs.read()
fs.close()
print(s)

اگر فایل شما وجود داشته باشد و مسیر آنرا درست وارد کرده‌اید پس باید محتویات انرا ببینید.

این کد چطور کار میکند؟

در خط اول ما با دستور open یک فایل را با مود tr بازکرده ایم و شی fs نیز به همان فایل اشاره میکند.مود tr یعنی text reading یعنی اینکه یک فایل متنی را برای خواندن بازکرده‌ایم.

در خط دوم تمام محتویات فایل مورد نظر را در متغیر s قرار داده ایم.چون اینجا فایل ما متنی است پس نوع s نیز string(رشته) است.

در خط سوم فایل را بسته ایم.با اینکه پایتون به این مسأله اعتراض نمیکند اما همیشه باید زمانی که با فایلی کار ندارید آنرا ببندید تا حافظه‌ای که به آن اختصاص داده شده است آزاد شود.

در خط چهارم نیز محتویات s را چاپ کرده‌ایم که محتویات فایل ما میباشد.

>>> fs =
open('./foo')
>>> s = fs.read()
>>> fs.close()
>>> print(s)
LOL Code is 106540684654068406
Need md5sum?
md5sum LOOOOOOOOL
:D
 
>>>

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

نوشتن روی یک فایل متنی

 

باز‌هم یک مثال:

fs = open('PATH_TO_FILE', 'wt')
fs.write('This is a file')
fs.close()

باز‌هم باید PATH_TO_FILE را با مسیر یک فایل جایگزین کنید.این فایل نباید وجود داشته باشد یه اگر وجود دارد نباید محتویات آن برای شما مهم باشد.

هشدار! اگر مسیر یک فایل را بدهید که از قبل وجود دارد تمام محتویات فایل پاک شده و محتویات جدید جایگزین آن میشود!

حال مفسر پایتون را ببندید و با یک ویرایشگر متن انرا باز کنید.طبیعتا عبارت This is a file را میبینید.


اضافه کردن به فایل

برای اضافه کردن چیزی به یک فایل از مودی به اسم Append استفاده میکنیم:

fp= open(“path/to/file”, “at”)

این مود فایل رو برای نوشتن باز میکنه اما دیتای قبلی رو حذف نمیکنه.

فکر کنم نیازی به توضیح بیشتر نباشه.

fp = open(“/path/to/file.txt”, ‘ta’)
fp.write(‘Hai this is a text whoo whoo’)
fp.close()

مود باینری 

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

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

fp = open(“file”, “br”)
print(fp.read1(1))
fp.close()

خب ما اینجا به تابع read1  گفتیم فقط یک بایت رو میخوایم بخونیم.

یک روش دیگه هم اینه:

fp = open(“file”, “br”)
print(fp.read()[0])
fp.close()

تابع read تمام بایت های فایل رو میخونه اما ما فقط اولین بایتش رو نشون میدیم.البته عقلاتی نیست به خاطر یک بایت تمام بایت ها رو بخونیم. هست؟

 

نوشتن توی مود باینری

خب کد زیر یک متن ساده رو با انکودینگ اسکی انکود میکنه و مینویسه روی فایل:

fp = open(“ooo”, “bw”)
fp.write(bytes(“ABCabc”, “ascii”)
fp.close()

همونطور که احتمالا تا الآن متوجه شدید داخل مود باینری شما با بایت های سرکار دارید.داخل پایتون یک نوع داده به اسم bytes وجود داره که خودش آرایه ای از بایت ها هستش.شما میتونید تقریبا هرچیزی رو به بایت ها تبدیل کنید.چند تا مثال:

bytes_of_str_ascii = bytes(“This is an ASCII txt”, “ascii”)
bytes_of_str_utf8 = bytes(“Hey i am utf-8“, “utf-8”)
bytes_of_int = bytes(1000)