美文网首页PythonPython
第十一章 Python3_操作文件之上下文管理器和编辑文件

第十一章 Python3_操作文件之上下文管理器和编辑文件

作者: 热爱_生活 | 来源:发表于2019-12-27 17:39 被阅读0次

    一、with 语句管理上下文

    在实际的编程中,我们会经常忘记关闭已经打开的文件对象,这样就会导致系统资源的浪费。

    下面就推荐个保险的办法 :

    with open('f1.txt','r', encoding='utf-8') as f:
        content = f.read()
        print(content)
    print('此时文件已经自动关闭了')
    
    

    使用 with 语句来管理上下文 ,操作之后,python 内部会自动关闭并释放文件资源。



    二、文件的修改

    文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果。

    1. 就是先把要修改的文件内容读取到内存中,在内存中修改;
    2. 之后再把修改好的内容先存到一个临时的文件中;
    3. 最后把原来的文件删除,再把临时的文件的文件名修改为原来文件的文件名。

    流程解析

    """
    
    1\. 把源文件内容 读到内存中
    2\. 在内存中修改文件的内容
    
    3\. 把修改好的文件内容存到另外一个临时的文件中
    
    4\. 把原文件删除
    
    5\. 把临时文件的文件名修改为 原文件的文件名
    
    """
    
    # 1\. 把源文件内容 读到内存中
    with open('a.txt',
              'r',
              encoding='utf-8'
              ) as rf, open(
              '.a.txt.swap',
              'w',
               encoding='utf-8') as wf:
    
        content = rf.read()
    
        # 2\. 在内存中修改文件的内容
        new_content = content.replace('你好', 'world')
    
        # 3\. 把修改好的文件内容存到另外一个临时的文件中
        wf.write(new_content)
    
    # 4\. 把原文件删除
    import os
    os.remove('a.txt')
    
    # 5\. 把临时文件的文件名修改为 原文件的文件名
    os.rename('.a.txt.swap', 'a.txt')
    
    

    Python 中,具体的说有两种实现方式:

    注意自己操作的文件的路径、权限、当初用什么编码写入的。比如你是在 Windows 系统下创建并写入的文件,字符编码默认是 gbk

    1. 方式一:将硬盘存放的该文件的内容全部加载到内存,进行修改。

    import os
    
    with open('a.txt', 'r', encoding='utf-8') as read_f, open(
        '.a.txt.swap','w', encoding='utf-8') as write_f:
    
        r_data=read_f.read()  # 全部读入内存,如果文件很大,会很卡
        w_data=r_data.replace('你好','你好广州')  # 在内存中完成修改
    
        write_f.write(w_data) # 一次性写入新文件
    
    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt') 
    
    

    2. 方式二:将硬盘存放的该文件的内容读一行,改一行,存一行。

    import os
    
    with open('a.txt', 'r', encoding='utf-8') as read_f,open(
        '.a.txt.swap','w', encoding='utf-8') as write_f:
        for line in read_f:
            line=line.replace('广州','guangzhou')
            write_f.write(line)
    
    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt') 
    
    

    相关文章

      网友评论

        本文标题:第十一章 Python3_操作文件之上下文管理器和编辑文件

        本文链接:https://www.haomeiwen.com/subject/zqwdoctx.html