zoukankan      html  css  js  c++  java
  • python文件读写模式 --- r,w,a,r+,w+,a+,rb,wb

    要了解文件读写模式,需要了解几种模式的区别,以及对应指针

    r : 读取文件,若文件不存在则会报错

    w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件

    a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾

    rb,wb:分别于r,w类似,但是用于读写二进制文件

    r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖

    w+ : 可读,可写,文件不存在先创建,会覆盖

    a+ :可读、可写,文件不存在先创建,不会覆盖,追加在末尾

    注意:这里的覆盖是指每次重新打开文件进行操作时覆盖原来的,如果是在打开文件中则不会覆盖


    ---------------------
    作者:07151012
    来源:CSDN
    原文:https://blog.csdn.net/qq_32648375/article/details/83342094
    版权声明:本文为博主原创文章,转载请附上博文链接!

    # 打开文件进行操作
    with open("a.txt","w") as file:
        file.write("123")
        file.write("456")
    # 结果为 123456 虽然w操作模式会进行覆盖,但是此时没有
     
    # 再次打开文件进行操作
    with open("a.txt","w") as file:
        file.write("123")
    # 结果为 123 此时才是覆盖原来的a.txt

    读、写操作时候涉及到指针

    指针相关的函数有:seek(x[,y]),x设置指针的位置,y(=0开头,=1中间,=2末尾)

                                    tell(),查询指针的位置

    指针注意点:1.每次打开文件默认指针是在开头的,可以通过seek()来设置指针的位置进行读写操作

                          2. 每次操作都是从当前指针指向位置向后进行读写

    例如:使用w模式(覆盖模式)进行写入时,指针会从头开始,写入完,指针指向最后

    with open("a.txt","w") as file:
        print(file.tell())      //0,写入前指针为0
        file.write("123")       //写入123
        print(file.tell())      //3,写入后指针变为3
    # a.txt为123
     
    # 重新打开同一个a.txt文件
    with open("a.txt","w") as file:
        print(file.tell())      //0,写入前指针为0
        file.write("456")       //写入456
        print(file.tell())      //3,写入后指针变为3
    # a.txt为456

    再来看看a模式(非覆盖模式)

    with open("b.txt","a") as file:
        print(file.tell())      //0,写入前指针为0
        file.write("123")       //写入123
        print(file.tell())      //3,写入后指针变为3
    # b.txt为123
     
    # 重新打开同一个b.txt文件
    with open("b.txt","a") as file:
        print(file.tell())      //3,写入前指针为3
        file.write("456")       //写入456
        print(file.tell())      //6,写入后指针变为6
    # b.txt为123456

    所以只要知道指针的起始位置以及最后位置,就能知道文件读取的内容

    再来了解一下有关于文件读的时候

    read([value]):value为设置内容读取的长度

    举个例子(与指针结合起来看)

    # 首先我先创建一个a.txt文件,内容为12345678
     
    with open("a.txt","r") as file:
        content = file.read(3)       // 读取长度为3
        next_content = file.read()   // 第二次读取
        print(content)               // 123
        print(next_content)          // 45678
     
     
    # 为什么第二次读取的时候结果会是45678呢?
    # 在同一个打开文件中,因为第一次读取完,指针指向了3,所以再次读取时候,从指针3开始读取

    再来将seek()函数引入,相同例子

    # 首先我先创建一个a.txt文件,内容为12345678
     
    with open("a.txt","r") as file:
        content = file.read(3)
        file.seek(1)                // 设置指针位置为1
        next_content = file.read()  // 第二次读取
        print(content)              // 123
        print(next_content)         // 2345678
     
    # 由于seek设置了指针为2,所以第二次读取时候,从指针为2出进行读取了

    文件读的操作相关还有readline,readlines,for in遍历

    顾名思义 readline就是读取一行,readlines就是读取所有行

    文件较大时,可以用readline或for in 遍历,节省内存,但是性能低

    文件较大时,可以用read,readlines一次性处理,占用内存大,但是性能高

    看了一下几个例子就能理解了:

    # 先创建一个多行的txt文件
      a.txt:123
            456  
     
    # for in 方法
    with open("a.txt","r") as file:
        for i in file:
            print(i,end="")     //由于每行末尾默认带有换行符,所以end=""设置一下输出样式
     
    // 结果为 123
              465
     
     
    # readline 方法:每次读取一行
    with open("a.txt","r") as file:
        content = file.readline()  
        print(content,end="")      //123
        content1 = file.readline()
        print(content1,end="")     //456
     
     
    # readlines 方法 
    with open("a.txt","r") as file:
        lines = file.readlines()   // 读取每一行
        for line in lines:         // 遍历取出每一行
            print(line,end="") 
     
    // 结果为 123
              465

    以上内容来源于 https://blog.csdn.net/qq_32648375/article/details/83342094

  • 相关阅读:
    uIP学习笔记
    ALIENTEK 战舰ENC28J60 LWIP和UIP补充例程
    PID整定方法
    ENC28j60以太网芯片驱动程序简介
    Petit FatFs
    如何使用可控硅?(详细教程)
    Linux查看系统资源占用
    驾照科目三考试通过需要注意什么?
    科目三考试
    驾照的科目三考试中,如何完成直线行驶?
  • 原文地址:https://www.cnblogs.com/hankleo/p/10381345.html
Copyright © 2011-2022 走看看