1. 程式人生 > >十二.Python檔案操作邏輯與解耦

十二.Python檔案操作邏輯與解耦

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")