Python File Handling
17 May 2020 / 7 min read
ကျွန်တော်တို့ python တွင် ဖိုင်အသစ် ဖန်တီးခြင်း ၊ ပြင်ဆင်ရေးသားခြင်း ၊ ဖြည့်စွက်ခြင်း ၊ ဖတ်ခြင်း စသည်တို့ လုပ်ဆောင်ဖို့ရန် အတွက် အခြားသော external library ထပ်ထည့်ရန် မလိုအပ်ဘဲ ၎င်း လုပ်ဆောင်ချက် လုပ်ဆောင်နိုင်ရန် သူ့တွင် ပင်ကို ဖန်ရှင်းအဖြစ် ပါရှိပြီး ဖြစ်ပါသည်။ Python File Handling တွင် အဓိကအားဖြင့် သုံးချက်ရှိသည်။၎င်းမှာ ဖိုင် ဖွင့်ခြင်း ၊ ဖိုင် ရေးခြင်း/ဖတ်ခြင်း/ပြင်ခြင်း နှင့် ဖိုင် ပိတ်ခြင်း တို့ ဖြစ်သည်။ ၎င်းတို့ အကြောင်းကို ဆက်လက်ရှင်းလင်းပါမည်။
Text ဖိုင် တစ်ခု ဖွင့်ခြင်း
ကျွန်တော်တို့ ဖိုင်တစ်ခုကို သုံးမည်ဆိုပါက ယင်းကို ဖွင့်ရန် လိုပေသည်။ ထို့ကြောင့် ဖိုင် ဖွင့်မည်ဆိုပါက built-in open function ကို သုံးရပေမည်။ open function တွင် file object နှင့် ကျွန်တော်တို့ ဖွင့်လိုသင့် ဖိုင် အမည် နှင့် ကျွန်တော်တို့ ဖွင့်မည့် နည်းလမ်း(mode) တို့ပါဝင်သည်။ အလုပ်လုပ်ပုံမှာ ကျွန်တော်တို့ ဖွင့်လိုသော ဖိုင်အမည် နှင့် ကျွန်တောတို့ သတ်မှတ်ပေးလိုက်သော mode တို့ပေါ်တွင် မူတည်၍ အလုပ်လုပ်ခြင်းဖြစ်သည်။ open function ၏ ရေးသားပုံမှာ အောက်ပါအတိုင်းဖြစ်သည်။
file_object = open("filename", "mode")
Filename - အသုံးပြုသူမှ ဖွင့်လိုသော ဖိုင်အမည် mode -အသုံးပြုသူ ထည့်လိုက်သော ဖိုင်အား ဖွင့်ရန် ညွန်းကြားချက်
Python open function တွင် filename နှင့် mode ဟူသော parameter နှစ်မျိုး ပါရှိသည်။ထို့အပြင် mode တွင်လည်း မတူညီသော အဓိက method သုံးမျိုး ရှိသည်။ ၎င်းတို့မှာ ဖတ်ရန်အတွက် “r” method ၊ ရေးရန်အတွက် “w” method နှင့် ပြင်ဆင်ရန်အတွက် “a” method တို့ဖြစ်သည်။ ၎င်းတို့နှင့် ဆက်စပ်သော အခြားသော mode များကို လည်း အောက်တွင် ဇယားဖြင့် ဆက်လက် ဖော်ပြထားပါသည်။
No. | Mode | Description |
---|---|---|
1. | “r” | ဖိုင်ဖတ်ရန် အတွက် ဖြစ်ပြီး ထို့သို့ဖတ်ရန် ဖိုင်ရှိနေပြီးသားဖြစ်ရန်လိုသည်။ |
2. | “w” | ဖိုင်ရေးရန်အတွက် ဖိုင်အသစ်ဖန်တီးခြင်းဖြစ်သည်။ အကယ်၍ ကိုယ်ပေးထားသော ဖိုင်နာမည်နဲ့ နာမည်တူ ဖိုင်ရှိနေခဲ့လျှင် ရှိနေပြီးသား ဖြစ်လျှင် ထိုဖိုင်မှအကြောင်းအရာများကို ဖယ်ရှားပြီးအသစ်ရေးသားသော အကြောင်းအရာများဖြင့် အစားထိုးသွားမည် ဖြစ်သည်။ |
3. | ”a” | ဖိုင်ပြင်ဆင်ရေးသားရန်အတွက် ဖြစ်ပြီးဖိုင်မရှိလျှင် အသစ်ဖန်တီးသွားမည် ဖြစ်သည်။ |
4. | ”r+“ | ဖိုင် ရေးရန် နဲ့ ဖတ်ရန် အတွက် ဖိုင်ဖွင့်ခြင်း ဖြစ်ပြီး ဖိုင်ရှိနေပြီးသား ဖြစ်ရမည်။ |
5. | ”w+”,’’x’’ | ဖိုင် ရေးရန် နဲ့ ဖတ်ရန် အတွက် ဖိုင်အသစ် ဖန်တီးခြင်း ဖြစ်သည်။ |
6. | ”a+“ | ဖိုင် ရေးရန် နဲ့ ပြင်ဆင်ရန် အတွက် ဖိုင်ဖွင့်ဖြင်း ဖြစ်သည်။ |
Text ဖိုင်တစ်ခု ဖန်တီးခြင်း
ကျွန်တော်တို့ txt ဖိုင်တစ်ခုဖန်တီးရန် ဦးစွာ အရင်ဆုံး open() function သုံးကာ တည်ဆောက်ပါမည်။
ပထမ အဆင့်
f= open("hello.txt","w+")
ပထမအဆင့် အနေဖြင့် ကျွန်တော်တို့ ဖိုင်တစ်ခု ဖန်တီးမည် ဖြစ်ပြီး open function မှာ hello.txt ဟူသော အမည်ဖြင့် ကျွန်တော်တို့ ဖိုင် နာမည် သတ်မှတ်လိုက်တာပါ။ ထို့နောက် ကျွန်တော်တို့ open function မှာ mode သတ်မှတ်ပေးဖို့ ကျန်နေပါသည်။ ထို့ကြောင့် ကျွန်တော်တို့မှာ မူလကတည်းက မရှိသေးတဲံ ဖိုင် ဖန်းတီးမှာ ဖြစ်လို့ w+ mode သုံးပြီး ရေးလိုက်ပါသည်။ ဤတွင် x mode လည်း သုံးပြီး ရေးလို့ရပါသည်။ ပြီးရင် ကျွန်တော်တို့ run ကြည့်ရင် ကျွန်တော်တို့ ပေးထားတဲ့ နာမည်နဲ့ ဖိုင်တစ်ခု တိုးလာတာကို မြင်တွေ့ရမှာ ဖြစ်ပါသည်။ ဖိုင် ဖန်တီး လို့ရသွား ဖြစ်လို့ ဖိုင်ထဲမှာ ကျွန်တော်တို့ စာသားတွေ ထည့်ကြည့်ပါမည်။
ဒုတိယ အဆင့်
for i in range(10):
f.write("This is line %d\n" %(i+1))
ကျွန်တော်တို့ ဖိုင်ထဲကို “This is line (no)” ဆိုပြီး စာသား ဆယ်ကြောင်းကို for loop ပတ်ပြီးထည့်သွားမှာ ဖြစ်ပါသည်။ ထို့သို့ ဖိုင်ထဲ စာသား ထည့်ဖို့ ကျွန်တောတို့ wirte function သုံးပြီး ထည့်မှာ ဖြစ်ပါသည်။ for loop တစ်ကြိမ်ပတ်ပြီး write function ဖြင့်file ထဲ တစ်ကြောင်းချင်းစီး ထည့်ပေးသွားခြင်း ဖြစ်သည်။
တတိယအဆင့်
f.close()
နောက်ဆုံး အဆင့်ကတော့ ကျွန်တော်တို့ ဖွင့်ထားတဲ့ဖိုင် hello.txt ဖိုင်ရဲ့ လုပ်ငန်းစဥ် ၊ ဖြစ်စဥ်ကို ရပ်တန့်ပြီး ဖိုင်ပိတ်လိုက်သည့် သဘော ဖြစ်ပါသည်။
Program
f= open("hello.txt","w+")
for i in range(10):
f.write("This is line %d\n" %(i+1))
f.close()
ဖိုင်တစ်ခုသို့ ဒေတာ ထည့်သွင်းခြင်း
ဖိုင်တစ်ခု ဒေတာ ထည့်သွင်း ဆိုသည်မှာ ကျွန်တောတို့ ခုနက လိုမျိုး ဖိုင်တစ်ခု ထဲကို w mode သုံး၍ စာသားထည့်သွင်း ကဲ့သို့ပင် ဖြစ်သည်။ သို့သော် w mode သုံး၍ ထည့်ရာတွင် နဂိုရှိပြီးသား စာသားများ ၊ ဒေတာများကို နောက်ထပ် ထည့်ခြင်းဘဲ ရှိရင်းစာသားနေရာမှာ အစားသွင်းသွားသည့် သဘော ဖြစ်သည်။ ထို့ကြောင့် ကျွန်တော်တို့ နဂိုရှိရင်းစွဲ ကို မဖျက်စေလိုဘဲ နောက်ထပ်အသစ်သစ်သော ဒေတာများထည့်လိုသော အခါမျိုးတွင် ကျွန်တော်တို့ a+ mode သုံး၍ ရေးနိုင်သည်။
Program
f=open("hello.txt", "a+")
for i in range(2):
f.write("Appended line %d\r\n" % (i+1))
f.close()
ကျွန်တော်တို့ ဖိုင်ဖွင့်သည့် လုပ်ငန်း ဖြစ်တဲ့ ဖွင့် /ရေး/ပိတ် အတိုင်းပင် ပထမဆုံး လုပ်ရသည်မှာ ဖိုင်ဖွင့်ရန် ဖြစ်သည်။ ထို့ကြောင့် open function သုံးကာ ၎င်းအနက် ကျွန်တော်တို့ ပေးလို့သော ဖိုင်အမည် နဲ့ mode ဟူသော argument နှစ်ခု ကျွန်တော်တို့ သက်မှတ် ပါသည်။ ကျွန်တော်တို့က ဖိုင်မှာ ဒေတာ အသစ် ထည့်လိုခြင်း ဖြစ်သောကြောင့် a+ mode သုံးကာ ရေးပါမည်။ ထို့နောက် ကျွန်တော်တို့ ထည့်လိုသော ဒေတာကို ရေးပြီး write function ဖြင့် ထည့်ပါမည်။ ဤကုဒ်တွင်မူ ကျွန်တော် Appended line ဟူသော စာသား ကို for loop နှစ်ခါ ပတ်၍ ထည့်ပါသည်။ နောက်ဆုံး အနေဖြင့် လုပ်ငန်းစဥ် ပြီးဆုံးရန် အတွက် close ဖြင့် အဆုံးသတ်ပါမည်။
ဖိုင်တစ်ခု အား ဖတ်ခြင်း
ကျွန်တော်တို့ python မှာ txt file တစ်ခုကို ဖတ်မည်ဆိုပါက ကျွန်တော်တို့ read mode ကိုသုံး၍ ဖတ်နိုင်ပါသည်။
Step 1)
f=open("hello.txt", "r")
ကျွန်တော်တို့ hello.txt file ကို read mode သုံး၍ ဖတ်ရန် open function တွင် အထက်ပါအတိုင်းရေးလိုက်ပါသည်။ သို့သော် သတိပြုရရန်မှာ ကျွန်တော်တို့သည် r mode သုံးထားခြင်းကြောင့် ဖတ်လိုသော ဖိုင်ရှိမှသာ ဖတ်မည် ဖြစ်သည်။ ထို့ကြောင့် ကျွန်တော်တို့ read mode သုံးပါက ဖတ်မည့်ဖိုင် ရှိမှသာလျှင် အလုပ်လုပ်မည် ဖြစ်သည်။
Step 2)
if f.mode == 'r':
ဒုတိယ အနေဖြင့် ကျွန်တော်တို့ ရေးထားတဲ့ read mode အလုပ်လုပ် ဖြစ်၊ မဖြစ် သိရန် f.mode == ‘r’ ဖြင့် စစ်ဆေးပါမည်။
Step 3)
contents =f.read()
အကယ်၍ အလုပ်ဖြစ်ရင် read() function ကို သုံးပြီး contents တွင် assgin လုပ်ပါမည်။အဆိုပါ assgin လုပ်ထားသော contents ကို print ထုတ်ပါမည်။
Program
f = open("hello.txt","r")
if f.mode =="r":
a = f.read()
print(a)
else:
print("Can't Read the file")
ဖိုင်တစ်ခုအား ဖျက်ခြင်း
ကျွန်တော်တို့ ဖန်တီး ပြီးသားဖြစ်တဲ့ ဖိုင်တစ်ခုကို ဖျက်ခြင်းရင် python မှာ OS module ကို import လုပ်ပြီး ၎င်း module မှာ os.remove() function ကိုသုံးပြီး ဖျက်လို့ရနိုင်သည်။
Program
import os
if os.path.exists("demofile.txt"):
os.remove("demofile.txt")
else:
print("The file does not exist")
ယခု program မှာဆိုရင် ကျွန်တော်တို့ ဖျက်လိုတဲ့ ဖိုင်ဟာ တကယ် ရှိ ၊ မရှိ if else conduction ဖြင့် စစ်ခြင်း ဖြစ်ပါသည်။ ထို့သို့ စစ်ခြင်းဖြင့် ကျွန်တော်တို့ erro တက်ခြင်းမှ လျော့နည်း ကင်းဝေးနိုင်ပါသည်။ ထို့ကြောင့် အကယ်၍ ဖိုင်ရှိခဲ့ရင် ဆိုပြီး os.path.exists(ဖိုင်အမည်) ဆိုကာ os.remove ဖြင့် ဖယ်ရှားပါမည်။ အကယ်၍ ဖိုင်မရှိခဲ့ဘူး ဆိုရင် ကျွန်တော်တို့ “This files does not exist” ဆိုပြီး print ထုတ်လိုက်ပါမည်။ remove() function သည် ဖျက်လိုသော ဖိုင်ရှိမှသာ အလုပ်လုပ်ဖြစ်မည် ဖြစ်သောကြောင့် error ကင်းအောင် if else ခံပြီး စစ်လိုက်ခြင်း ဖြစ်ပါသည်။ ခုက txt ဖိုင်တစ်ခုကို ဖယ်ရှားခြင်း ဖြစ်ပြီး နောက်တစ်ခု ကျွန်တော်တို့ folder တစ်ခုကို os module မှ function ကို သုံးပြီး ဖယ်ရှားကြည့်ပါမည်။
import os
os.rmdir("myfolder")
ယခု program မှာ ဆိုရင်ဖြင့် ကျွန်တော်တို့ ဖယ်ရှားလိုသော folder တစ်ခုကို os module မှ rmdir function သုံးပြီး ဖယ်ရှားမှာ ဖြစ်ပါသည်။ သတိပြုရန် မှာ rmdir function သည် folder အလွတ်ကိုသာ ဖယ်ရှားနိုင်ခြင်းကြောင့် မဖယ်ရှားခင် folder မှ ဖိုင်များကို ဖျက်သင့်သည်။
Program
ယခု program ကတော့ လစဥ်ကျသင့်တဲ့ အိမ်သုံးမီတာခ တွက်တဲ့ program ဖြစ်ပြီး တစ်လစာ ကိုယ်သုံးတဲ့ မီတာ ယူနစ် ပမာဏကို ရိုက်သွင်းပြီး သက်ဆိုင်ရာ ယူနစ် အလိုက် တွက်ချက်ပေးကာ ဓာတ်အားခ နှင့် ဝန်ဆောင်ခ အပါအဝင် စုစုပေါင်း ကျသင့်ငွေကို ပြသမည့် program ဖြစ်ပါသည်။ အကယ်၍ ကိုယ်တွက်ထားတဲ့ မီတာဘေလ် ကို xlsx (Sheet File) ဖြင့် ထုတ်လိုရင် လဲ ထုတ်နိုင်တဲ့ program တစ်ခု ဖြစ်ပါသည်။ ယခု program မှာဆိုရင်ဖြင့် အထက်က ဖော်ပြခဲံသော python open() function နဲ့ xlsx file ထုတ်မည် ဖြစ်သောကြောင့် xlsewriter module တို့ကို အခြေခံပြီး ရေးထားခြင်း ဖြစ်ပါသည်။ ကုဒ်ကို အောက်တွင် သာမက GitHub တွင်လည်း ကြည့်နိုင်ပါသည်။
# Python Program to Calculate Electricity Bill
import xlsxwriter
#create file as MeterBill.xlsx with open function
f = open("MeterBill.xlsx","w+")
workbook = xlsxwriter.Workbook('MeterBill.xlsx')
worksheet = workbook.add_worksheet("My sheet")
amount = 0
total = 0
units = int(input("Enter Number of Units: "))
surcharge = int(input("Enter Surcharge: "))
if(units < 30):
amount = units * 35
print("Cost of 1 to 30 :",amount)
content = ["သင့်ငွေ",amount]
elif(units <= 50):
amount = ((units - 30) * 50)+ 1050
print("Cost of 1 to 30 : 1050")
print("Cost of 31 to 50 :",amount)
content = ["သင့်ငွေ",1050,amount]
elif(units <= 75):
amount = ((units - 50) * 70)+ 2050
print("Cost of 1 to 30 : 1050")
print("Cost of 31 to 50 : 1000")
print("Cost of 51 to 75 :",amount)
content = ["သင့်ငွေ",1050,1000,amount]
elif(units <= 100):
amount = ((units - 75) * 90)+ 3800
print("Cost of 1 to 30 : 1050")
print("Cost of 31 to 50 : 1000")
print("Cost of 51 to 75 : 1750")
print("Cost of 76 to 100 :",amount)
content = ["သင့်ငွေ",1050,1000,1750,amount]
elif(units <= 150):
amount = ((units - 100) * 110)+ 6050
print("Cost of 1 to 30 : 1050")
print("Cost of 31 to 50 : 1000")
print("Cost of 51 to 75 : 1750")
print("Cost of 76 to 100 : 2250")
print("Cost of 100 to 150 :",amount)
content = ["သင့်ငွေ",1050,1000,1750,2250,amount]
elif(units <= 200):
amount = ((units - 150) * 120)+ 11550
print("Cost of 1 to 30 : 1050")
print("Cost of 31 to 50 : 1000")
print("Cost of 51 to 75 : 1750")
print("Cost of 76 to 100 : 2250")
print("Cost of 100 to 150 : 5500")
print("Cost of 151 to 200 :",amount)
content = ["သင့်ငွေ",1050,1000,1750,2250,5500,amount]
else:
amount = ((units - 200) * 125)+ 17550
print("Cost of 1 to 30 : 1050")
print("Cost of 31 to 50 : 1000")
print("Cost of 51 to 75 : 1750")
print("Cost of 76 to 100 : 2250")
print("Cost of 100 to 150 : 5500")
print("Cost of 151 to 200 : 6000")
print("Cost of 201 and over :",amount)
content = ["သင့်ငွေ",1050,1000,1750,2250,5500,6000,amount]
total = amount + surcharge
print("\nElectricity Bill : %.2f" %amount)
print("Surcharge :",surcharge)
print("===================================")
print("Total Bill : %.2f" %total)
data = (
['ယူနစ်အလွှာ', 'နှုန်းထား'],
['၁ မှ ၃၀ယူနစ်','၃၅ ကျပ်'],
['၃၁ မှ ၅၀ယူနစ်','၅၀ ကျပ်'],
['၅၁ မှ ၇၅ယူနစ်','၇၀ ကျပ်'],
['၇၆ မှ ၁၀၀ယူနစ်','၉၀ ကျပ်'],
['၁၀၁မှ ၁၅၀ယူနစ်','၁၁၀ ကျပ်'],
['၁၅၁မှ ၂၀၀ယူနစ်','၁၂၀ ကျပ်'],
['၂၀၁ နှင့်အထက်','၁၂၅ ကျပ်'],
['ဓာတ်အားခ စုစုပေါင်း',''],
['မီတာဝန်ဆောင်ခ',''],
['စုစုပေါင်း ကျသင့်ငွေ',''],
)
row = 0
col = 0
for d, e in (data):
worksheet.write(row, col, d)
worksheet.write(row, col + 2, e)
row += 1
r = 0
c = 3
for a in content :
worksheet.write(r, c, a)
r += 1
worksheet.write('D9',amount)
worksheet.write('D10',surcharge)
worksheet.write('D11',total)
no = int(input("\n1: Export the bill\n2: Exit\nEnter:"))
if(no == 1):
workbook.close()
print("Successly export as MeterBill.xlsx file!\nThank You! ")
else:
print("OK Bye!")
exit()
f.close()