文件的修改
Posted hale-wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件的修改相关的知识,希望对你有一定的参考价值。
""" 文件的修改 """ # 1.读取文件数据到内存 # 2.进行修改 # 3.将修改后的数据写回文件中 new_data = "" with open("userdb.txt",encoding="utf-8") as f: data = f.read() #读出来的是一堆字符串,因为encoding="utf-8会将二进制解码 datas = data.split(" ") 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 += " " # 拼接修改过的数据 new_data += new_line else: # 拼接未被修改的数据 line += " " 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") # 将交换文件重命名为源文件名