十二.Python檔案操作邏輯與解耦
阿新 • • 發佈:2018-12-23
Python檔案操作邏輯與解耦
import os #匯入os模組 tag=False #設定全部變數tar #解耦 #檔案查詢 def file_fetch(name): res = [] with open("data", "r", encoding="utf-8") as fi: #以讀的模式開啟檔案 for i in fi: #迴圈檔案內容 if i.find(name) > -1:#檢索一行內容是否與name匹配 res.append(i) #查詢到內容新增到res列表 return res #返回查詢到的內容列表 #檔案修改 def file_change(*args): res = select(args[0]) #獲取要查詢的內容 args = list(args) #將元組轉換為列表 args[0] = res #將查詢到的內容新增到res列表 with open("data", "r", encoding="utf-8") as f1, open("data1", "w", encoding="utf-8") as f2:#分別以讀的模式開啟data檔案,以寫的方式開啟data1檔案 for i in f1: #迴圈data的內容 tag = False #初始化tag for k in args[0]: #迴圈查詢要修改的內容 if i == k: #判斷是否是要修改的內容 tag = True #符合條件,改變tag f2.write(args[1][(args[0].index(k))])#將修改後的內容寫入到data1檔案 break #跳出迴圈 if tag == False: #判斷tag是否改變 f2.write(i) #內容不是要修改的內容,直接將data內容寫入到data1 os.remove("data.bak") #移除data.bak檔案 os.rename("data", "data.bak") #將data修改為data.bak os.rename("data1", "data") #將修改後的檔案改為data #檔案刪除 def file_delete(res): with open("data","r",encoding="utf-8") as f,open("data1","w",encoding="utf-8") as f1: #分別以讀的模式開啟data檔案,以寫的方式開啟data1檔案 for i in f: #迴圈data檔案內容 if i!=res[0]: #判斷遍歷出的內容不是要刪除的內容 f1.write(i) #將data檔案寫入到data1檔案 f.close() #關閉data檔案流 f1.flush() #將data1檔案流刷入到硬碟 f1.close() #關閉data1檔案流 if os.path.exists("data.bak"):#判斷是否存在data.bak os.remove("data.bak") #data.bak存在就刪除 os.rename("data","data.bak") #將data檔案改名為data.bak os.rename("data1","data") #將data1檔案改名為data #查詢 def select(name): return file_fetch(name) #呼叫file_fetch()查詢出內容並將內容返回 #修改 def change(*args): file_change(*args) #呼叫file_change()修改檔案內容 #刪除 def delete(name): res=select(name) #查詢要修改的內容 file_delete(res) #在檔案裡刪除引數內容 print("\033[1;41m%s\033[0m刪除成功!" % name) #輸出內容刪除成功 #新增 def add(*args): with open("data","a",encoding="utf-8") as f: #以追加的方式開啟data檔案 for i in args: #遍歷args引數檔案內容 f.writelines(i) #將遍歷的內容追加到data檔案 #判斷呼叫方式是否是本地呼叫 if __name__=="__main__": #查詢內容 res=select("xiaoming") #修改小明使用者的資料: change("小明",["user:Marry\n"," user_name:Marry,user_password:123456,user_add:上海"]) #新增Marry3使用者的資料 add(["\nuser:Marry3\n"," user_name:Marry3,user_password:1234563,user_add:上海3"]) #刪除Marry3使用者的內容 delete("Marry3")