文件的修改
阿新 • • 發佈:2019-02-07
出名字 字符 原來 源文件 判斷 內存 方式 read 讀取文件
""" 文件的修改 """ # 1.讀取文件數據到內存 # 2.進行修改 # 3.將修改後的數據寫回文件中 new_data = "" with open("userdb.txt",encoding="utf-8") as f: data = f.read() #讀出來的是一堆字符串,因為encoding="utf-8會將二進制解碼 datas = data.split("\n") for line in datas: print(line.split("|")[0]) name = line.split("|")[0] if name == "admin": # 取出名字判斷是否等於admin name = name+"[is good man]" # 如果是則添加 is good man # 取出密碼 和手機號 再次拼接為原來的樣式 pwd = line.split("|")[1] phone = line.split("|")[2] new_line = "|".join([name,pwd,phone]) new_line += "\n" # 拼接修改過的數據 new_data += new_line else: # 拼接未被修改的數據 line += "\n" new_data += line print(new_data) with open("userdb.txt",mode="wt",encoding="utf-8") as f: f.write(new_data) # 以上代碼存在什麽問題相當於把整個文件數據都存到內存中 會造成內存溢出 #
"""
文件修改的另一宗方式*******************讀取一行 修改一行 修改完立馬寫入硬盤,避免了內存溢出的問題 具體使用哪種方式 的看文件大小 較小的文件 推薦一次性讀到內存進行修改 減少io操作 較大的文件 則必須采用第二種方式 """ with open("userdb.txt",mode="rt",encoding="utf-8") as source_f,open("temp.swap",mode="wt",encoding="utf-8") as dst_f: for line in source_f: new_line = line.replace("admin","ADMIN") dst_f.write(new_line) import os os.remove("userdb.txt") # 刪除源文件 os.rename("temp.swap","userdb.txt") # 將交換文件重命名為源文件名
文件的修改