• 文件的高级应用


    文件的高级应用

    可读,可写

    即可读又可写(尽量不要使用) r+是在后面追加

    with open('test.py','r+',encoding='utf8') as fr:
        data=fr.read()
        print(fr.writable())
        fr.write('x=10')
        print(data)
    

    True test.py文件中写入x=10

    清空文件的功能是w提供的,w+更不要使用

    with open('test.py','w+',encoding='utf8') as fr:
        print(fr.readable())
        fr.write('a=5')
        data=fr.read()
        print(data)
        
    

    True test.py文件被清空,写入a=5

    a有追加的功能,a的指针在末尾,a+功能没什么用

    with open('test.py','a+',encoding='utf8')as fr:
        fr.seek(1,0)  #1表示偏移一位,0表示从头开始
        data=fr.read()
        print(data)
        fr.write('x=10')
        fr.flush()
    

    =5 test.py文件内为a=5x=10

    指针的应用,移动指针

    1. seek(按字节位移)
    with open('test.py','rb')as fr:
        fr.seek(1) #1表示位移1位,默认从文件头开始
        fr.seek(1,0) #1表示偏移一位,0表示从头开始  #b'=5x=10'
        fr.seek(2,1)  # 1表示偏移1位,1表示从当前位置开始 #b'5x=10'
        fr.seek(0,2)   # 0表示偏移0位,2表示文件末开始,把指针移到文件末
        print(fr.read())
    
    1. tell(每次统计都是从文件开头到当前指针所在位置)
    with open('test.py','r',encoding='utf8')as fr:
        fr.seek(2,0)
        print(fr.tell())
    
    
    1. read(n) n代表字符个数
    with open('test.py', 'r', encoding='utf8') as fr:
        print(fr.read(2))  # 读了6个字节
    

    4.truncate(n) truncate(n)是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件。

    with open('test.py', 'a', encoding='utf8') as fr:
         fr.truncate(7)  # 把2个字符后面的东西全清空
    
    以上四个方法都可以用,但没必要

    文件修改的两种方式

    文件没有修改这一说,只有覆盖这一说

    1. 将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘
    import os
    with open('test.py', 'r', encoding='utf8') as fr, 
            open('test_swap.py','w',encoding='utf8')as fw:
        data=fr.read()
        data=data.replace('sb','dsb')
    
        fw.write(data)
    os.remove('test.py')
    os.rename('test_swap.py','test.py')
    
    
    1. 一边读一边改
    import os
    with open('test.py','r',encoding='utf8')as fr, 
            open('test_swap.py','w',encoding='utf8')as fw:
        for i in fr:
            i=i.replace('dsb','sb')
            fw.write(i)
    os.remove('test.py')
    os.rename('test_swap_py','test.py')
    
    
    

    总而言之,修改文件内容的思路为:以读的方式打开原文件,以写的方式打开一个新的文件,把原文件的内容进行修改,然后写入新文件,之后利用os模块的方法,把原文件删除,重命名新文件为原文件名,达到以假乱真的目的。

  • 相关阅读:
    NStimer 被堵塞
    零基础学python-7.6 字符串格式化表达式
    实验记录三 通用输入输出(GPIO)
    VTK的安装配置-使用VS2010
    Python 查找Twitter中特定话题中最流行的10个转发Tweet
    ios开发之-计算器的改进
    彻查网络局部网段内Ping时断时续的问题
    hdoj-1016-Prime Ring Problem【深搜】
    WebView的截屏实现
    CentOs虚拟机能够互相ping通,但无法訪问虚拟机服务
  • 原文地址:https://www.cnblogs.com/aden668/p/11321697.html
Copyright © 2020-2023  润新知