• 20201217-1 文件修改详解


    # 对文件的操作,除了常见的读写,还有修改
    # 如果在源文件修改,会覆盖源文件
    # 有两个办法,vim 加载到内存中,然后才能进行修改,修改的文件其实是在内存里
    # 修改后,在写回源文件
    # 但硬盘不行,中间插一段,数据不会自动往后挤
    
    # 另一种方式是,打开一个文件,修改后,写入到新文件中
    # 不要觉得 low, 只能这么干
    
    # 逐行读取,找到后,插入写入新内容
    # 改完后,全放在新文件里,整个新文件是改后的文件
    # 边读边写,如果不是需要修改的,写到新文件中,如果是需要修改的,改完后,在写入
    
    # 所以,需要同时打开两个文件,一个文件读,另一个文件往里写
    1-1
    # 文件修改
    # 一定会用到循环,需要打开两个文件
    # 不要写 r+ 万一不小心写了呢
    f = open("yesterday","r",encoding="utf-8")
    f_new = open("yesterday2.bak","w",encoding="utf-8")
    
    for line in f:
        if "肆意的快乐" in line:
            line = line.replace("肆意的快乐等我享受","肆意的痛苦不断蔓延")
            f_new.write(line)
        else:
            f_new.write(line)
    1-1-2
    # 有两行一样的代码,如何只出现一次?
    f = open("yesterday","r",encoding="utf-8")
    f_new = open("yesterday2.bak","w",encoding="utf-8")
    
    for line in f:
        if "肆意的快乐" in line:
            line = line.replace("肆意的快乐等我享受","肆意的痛苦不断蔓延")
        f_new.write(line)
        # 这样做,是否可行呢?
        # 这样一句话就搞定了
    f.close()
    f_new.close()
    --->
    喔, 我宁回昨日
    肆意的快乐等我享受
    突然间 我迷失了自己
    
    喔, 我宁回昨日
    肆意的痛苦不断蔓延
    突然间 我迷失了自己
    
    # 如果不想出现两个文件,移回新文件就好了
     
    with 语句
    前面的程序都是忘记关闭的。虽然程序执行完成后,会自动帮你去关闭。
    既然能自动关闭,为什么我还要去关闭呢?
    虽然程序结束后,python 自带的垃圾回收机制会帮你自动关闭文件。
    但是,如果你的程序运行了,打开1000个文件没有关闭,只要你的程序不退出,打开的文件句柄就不会被清空,就会一直在内存中占有一个空间。
    虽然这个空间不会特别大,但是不断的累积会导致越来越大,造成不必要的空间浪费。
    比如 winXP 机器配置本来不好,打开几十个文件不关闭,机器就会越来越慢。
    所以,打开的文件,应该及时关闭操作完后,就关闭。但是还是会忘记,怎么办?新的方法,用 with。
    with open('log','r') as f:
    1-1
    f = open("yesterday2","r",encoding="utf-8")
    # 相当于
    with open("yesterday2","r",encoding="utf-8") as f:
        # 这个时候,如果想读里面的内容,也是,一样的
        print(f.readline())     # 缩进了,这是在 with 语句下进行的
    # as f 就相当于 f = open("yesterday2","r",encoding="utf-8")
    
    1-1-2 # 如果想进行循环呢? with open("yesterday2","r",encoding="utf-8") as f: for line in f: print(line) # 结果是一样的,不需要在写关闭 # 这段语句执行完毕之后,往下走时,with 就执行完毕了 # with 的作用就是关闭文件 # 以后要多用 with
    1-2
    # 在 Python 2.7 后,with 又支持同时对多个文件的上下文进行管理,即:
    with open('log1') as obj1, open('log2') as obj2:
        pass
    
    # Python 官方的开发规范说,一行代码不应该超过 80 个字符
    
    1-2-1
    # 为了方便观看,建议用一下的方式 (换行??)
    with open("yesterday2","r",encoding="utf-8") as f,
        open("yesterday2","r",encoding="utf-8") as f2:
        # 为了清晰,如果你同时打开多个文件,建议也这么写
        pass
  • 相关阅读:
    DotNetty 实现 Modbus TCP 系列 (一) 报文类
    C# 获取文件详细备注信息 (如图片、视频实际创建时间)
    Java 下载 HLS (m3u8) 视频
    开源 DotNetty 实现的 Modbus TCP/IP 协议
    SQL Server 2008 开启远程连接
    在 Web 页面使用 VLC 插件播放 m3u8 视频流 (360 极速模式)
    在 Web 页面中使用离线地图
    使用 Travis CI 自动部署 Hexo 站点至 GitHub Pages
    BZOJ 3238: [Ahoi2013]差异((单调栈+后缀数组)/(后缀树))
    BZOJ 3998: [TJOI2015]弦论(后缀自动机)
  • 原文地址:https://www.cnblogs.com/azxsdcv/p/14150263.html
Copyright © 2020-2023  润新知