"""
一:复制文件:
# # 打开源文件
# source_f = open("作业基础版.py","rb")
# # 打开目标文件
# dst_f = open("作业副本.py","wb")
#
# #从源文件读取数据 写入到目标文件
# data = source_f.read()
# dst_f.write(data)
#
# source_f.close()
# dst_f.close()
# with open("作业基础版.py","rb") as source_f,open("作业副本.py","wb") as dst_f:
# data = source_f.read()
# dst_f.write(data)
# 让用户指定要复制的文件
# source_path = input("请输入源文件路径:").strip()
# dst_path = input("请输入目标文件路径:").strip()
#
# with open(source_path,"rb") as source_f:
# with open(dst_path,"wb") as dst_f:
# data = source_f.read()
# dst_f.write(data)
# 基于CMD的复制工具 要达到的效果在CMD中直接输入要复制的文件路径以及 目标文件路径 一回车就完成复制
# 1.需要获取CMD输入的参数
import sys # 有一个文件叫sys import是导入这个文件
# sys文件里有一个变量名称叫argv
print(sys.argv) # 得到的就是执行解释器时传入的参数,第一个参数默认就是当前执行文件
二:文件对象的其他操作:
f.flush() # 立即将数据写入硬盘,可以保证数据不丢失,但是效率会降低
print(f.closed) # 文件是否已经关闭
print(f.encoding) # 获取文件的编码方式
#print(f.buffer) # 获取缓冲区 忘记它吧
三:文件的修改:
# 1.读取文件数据到内存
# 2.进行修改
# 3.将修改后的数据写回文件中
new_data = ""
with open("userdb.txt",encoding="utf-8") as f:
data = f.read()
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") # 将交换文件重命名为源文件名
"""