1. 程式人生 > >文件的修改

文件的修改

出名字 字符 原來 源文件 判斷 內存 方式 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") # 將交換文件重命名為源文件名

文件的修改