- """
- 文件的修改
- """
- # 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") # 将交换文件重命名为源文件名
文件的修改
来源: http://www.bubuko.com/infodetail-2946400.html