复制文件:从源文件读取 写入到新文件中 #打开源文件 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) #with的嵌套语法 with open("作业基础版.py","rb") as source_f: with open("作业副本.py","wb") as dst_f: data = source_f.read() dst_f.write(data) #with的嵌套时 注意:不要对同一个文件进行操作 with open ('log.txt','rb') as source_f: with open('log.txt','wb') as source_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)#得到的就是执行解释器时传入的参数,第一个参数默认就是当前执行文件 #源文件路径 source_path=sys.argv[1] #目标文件路径 dst_path=sys.argv[2] with open (source_path,'rb') as source_f: with open(dst_path,'wb') as dst_f: data=source_f.read() dst_f.write(data) 文件对象其他操作 f.name #获取文件的路径 f.flush #刷出 开机将数据写入硬盘 可以保证数据不丢失 但效率会降低 操作系统会在文件关闭时一次性写入 当操作系统的缓存满了也会写入 是为了减少I/O操作 提高效率 f = open("userdb.txt","at",encoding="utf-8") for i in range(10): data = input(">>:").strip() f.write(data) print("写了一次") f.flush() # 立即将数据写入硬盘,可以保证数据不丢失,但是效率会降低 f.close() print(f.closed)#文件是否已经关闭 print(f.encoding)#获取文件的编码方式 print(b.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") # 将交换文件重命名为源文件名 import os os.remove('')#删除文件 os.rename(' , ')#将交换文件重命名为原文件名
文件处理:高级
最新推荐文章于 2023-04-01 16:02:31 发布