فایلها
بازکردن فایل
ممکن است دادههای ما از قبل در فایلی موجود باشد (دانلود فایل) ، در اینصورت باید بتوانیم آن را باز کنیم:
= open('mbox.txt')
fhand print(fhand)
<_io.TextIOWrapper name='mbox.txt' mode='r' encoding='UTF-8'>
اگر باز کردن موفقیتآمیز باشد، سیستمعامل یک handle
برای فایل به ما برمیگرداند. handle
، دادههای واقعی موجود در فایل نیست، اما در عوض یک handle
است که میتوانیم برای خواندن دادهها از آن استفاده کنیم. اگر فایل درخواستی وجود داشته باشد و مجوزهای لازم برای خواندن فایل را داشته باشیم، به ما یک handle
داده می شود.
اما چنانچه فایل وجود نداشته باشد، اجرای این دستور ناموفق خواهد بود و handle
نخواهیم داشت:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'mbox.txt'
خواندن فایل
با بازکردن فایل، تنها یک handle
در اختیار خواهیم داشت تا بتوانیم با استفاده از آن با فایل موردنظر کار کنیم. بنابریان برای خواندن فایل، میبایست با یک دستور حلقه for
ساده، اقدام به خواندن فایل کنیم:
= open('mbox.txt')
fhand = 0
count for line in fhand:
= count + 1
count print('Line Count:', count)
Line Count: 7
با این دستورات، ما سعی کردهایم که فایل را خط به خط بخوانیم. اما این طریقه خواندن برای فایلهای بزرگ مورد استفاده قرار میگیرد. اگر فایلی داشته باشیم و بدانیم حجم آن کم است، میتوانیم از دستورات زیر استفاده کنیم:
= open('mbox.txt')
fhand = fhand.read()
inp print(len(inp))
334
print(inp[:20])
From stephen.marquar
در این حالت بهتر است رشته خوانده شده از فایل را در یک متغیر ذخیره کنیم، چراکه با خواندن فایل بعدی به همین روش، محتویات فایل قبلی را از دست خواهیم داد، به همین دلیل ما از متغیر inp
در دستورات فوق استفاده کردیم.
جستجو در فایل
اگر در فایل محتویات داده به دنبال کلمه و یا داده خاصی هستیم، میتوانیم آن را در فایلی که از قبل آن را باز کرده و خواندهایم، جستجو کنیم:
= open('mbox.txt')
fhand = 0
count for line in fhand:
= line.rstrip()
line if line.startswith('From:'):
print(line)
From: stephen.marquard@uct.ac.za
در این مثال، ما به دنبال کلمه 'From'
هستیم.
ما با استفاده از تابع rstrip()
فضای خالی را در سمت راست رشته موجود در فایل، حذف کردهایم.
انتخاب نام فایل
این مسئله برای ما پیش آمده که برای باز کردن یک فایل، همیشه نام و آدرس دقیق آن را نمیدانیم و نیاز است تا بتوانیم در مرورگر سیستم فایل خود، آن را جستجو کنیم. به این منظور، با استفاده از قطعه کد زیر، این امکان را به کاربر میدهیم که فایل موردنظر خود را ابتدا جستجو و سپس باز کند. در اینصورت ما دیگر نام فایل را بصورت مستقیم در کد خود نخواهیم داشت:
= input('Enter the file name: ')
fname = open(fname)
fhand = 0
count for line in fhand:
if line.startswith('Subject:'):
= count + 1
count print('There were', count, 'subject lines in', fname)
Enter the file name: mbox.txt
There were 1 subject lines in mbox.txt
استفاده از try
، except
و open
از کد قبل به خاطر داریم که ما به کاربر اجازه دادیم که نام فایل حود را برای بازکردن، انتخاب نماید. حال اگر کاربر ما چیزی را تایپ کند که نام فایل نیست چه؟ بنابراین باید تمهیداتی برای این کار بیاندیشیم، چرا که گذشته از اینکه بازکردن یک فایل غیرمرتبط برنامه را با خطا مواجه میکند، ممکن است فایلی که کاربر آن را انتخاب کرده، عمداً و یا سهواً برای برنامه ما ضرر داشته باشد. بنابراین ما با استفاده از دستورات try
، except
و open
این اتفاق را مدیریت میکنیم:
= input('Enter the file name: ')
fname try:
= open(fname)
fhand except:
print('File cannot be opened:', fname)
exit()= 0
count for line in fhand:
if line.startswith('Subject:'):
= count + 1
count print('There were', count, 'subject lines in', fname)
Enter the file name: otherfile.txt
File cannot be opened: otherfile.txt
There were 0 subject lines in otherfile.txt
همانطور که مشاهده میشود، تابع exit()
درصورت اینکه کاربر چیزی غیر از فایل را درخواست داده باشد، برنامه ما از اجرا خارج میشود.
نوشتن در فایل
بیشتر اوقات افراد نیاز دارند که در فایل داده خود، ویرایش انجام داده یا داده جدیدی به آن بیافزایند. بنابراین باید قادر باشند که با استفاده از دستورات لازم، این کار را انجام دهند. اما یک نکته متفاوت اینجا مطرح میشود، به این قطعه کد توجه کنید:
= open('output.txt', 'w')
fout print(fout)
<_io.TextIOWrapper name='output.txt' mode='w' encoding='UTF-8'>
در اینجا چنانچه فایل موردنظر وجود داشته باشد، فایل باز شده و آماده نوشتن میباشد: در واقع پارمتر ‘w’ این اجازه را صادر میکند. اما اگر فایل موجود نباشد، یک فایل جدید با نام ذکر شده، ایجاد میشود و آماده نوشتن خواهد بود.
مثلاً فرض کنیم میخواهیم متن زیر را در فایل بنویسیم:
This here's the wattle
کد لازم برای این کار، به شکل زیر خواهد بود:
= "This here's the wattle,\n"
line1 fout.write(line1)
24
و درنهایت اینکه وقتی کارمان با فایلی تمام شد، میبایست حتماً آن را ببندیم:
fout.close()