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") # 将交换文件重命名为源文件名
    """
  • 相关阅读:
    《大数据——大价值、大机遇、大变革》试读
    div+csS中的一些技巧和浏览器兼容的办法
    js正则表达式
    布局 IE haslayout
    几个好的网站
    ie6 几个li上下排列会闪动的问题,嵌套div—外层div内层div都设置背景颜色,内层div背景色不显示的问题
    live()解决Jquery采用append添加的元素事件无效和获取不到添加元素的值
    SQL语句写返回一天内的纪录,得到一周内星期几的时间
    网易邮箱添加附件功能原理浅析转
    实体类序列化
  • 原文地址:https://www.cnblogs.com/xiezuodd/p/10241228.html
Copyright © 2011-2022 走看看