zoukankan      html  css  js  c++  java
  • 复制文件以及文件修改

    """
    一:复制文件:
    # # 打开源文件
    # 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(" ")
    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") # 将交换文件重命名为源文件名
    """
  • 相关阅读:
    2030
    2019
    2018
    在 《检验反相能力, 一题不会者 不配反相》 里 的 回复
    我转载了 历史吧 的 一个 帖 《为什么很多人说中国古代没有科学?这不扯淡嘛》 到 反相吧
    在 简单的数学题也不会做了。做一算术题,看看是否老年痴呆! 里 的 回复
    谈谈 光速
    相对论 的 时空观 本身 就会 导致 一个 绝对 的 参照系
    对 薛定谔 波函数, 我 关心 它的 推导依据, 不太关心 数学形式
    霍奇猜想 (二)
  • 原文地址:https://www.cnblogs.com/xiezuodd/p/10241228.html
Copyright © 2011-2022 走看看