zoukankan      html  css  js  c++  java
  • Python【每日一问】06

    问:简述Python文件打开模式 r、 w、 a、 r+、w+、a+之间的区别

    答:

    1.只读模式 r

    文件存在:只读打开,只能执行读操作

    文件不存在:报错

    # ######## 只读模式r ########
    filename = "file_test1"
    # 打开文件
    f = open(filename, "r", encoding="utf-8")
    # 读文件
    print(f.read())
    # 关闭文件
    f.close()

    2.只写模式 w

    文件存在:文件指针置于开头,清空原数据,写入新数据

    文件不存在:创建一个新的空文件,写入数据

    【注】:文件的数据不可读

    # ######## 只写模式w ########
    filename = "file_test2"
    # 打开文件
    f = open(filename, "w", encoding="utf-8")
    # 写入内容
    f.write("文件不存在:创建一个新的空文件")
    # 关闭文件
    f.close()

    文件 file_test2 此时的内容:

    文件不存在:创建一个新的空文件

    3.追加模式 a

    文件存在:文件指针置于文件的结尾,新的内容将会被写入到已有内容之后

    文件不存在:创建一个新的空文件,写入数据

    【注】:文件的数据不可读

    # ######## 追加模式a ########
    filename = "file_test2"
    # 打开文件
    f = open(filename, "a", encoding="utf-8")
    # 以追加内容的方式写入
    f.write("追加模式 a 
    文件存在:文件指针置于文件的结尾,新的内容将会被写入到已有内容之后")
    # 关闭文件
    f.close()

    文件 file_test2 此时的内容:

    文件不存在:创建一个新的空文件追加模式 a 
    文件存在:文件指针置于文件的结尾,新的内容将会被写入到已有内容之后

    4.读+追加模式 r+

    文件存在: 文件指针置于文件的开头,打开一个文件进行读与写(此处“写”的意思是:追加在文件末尾)

    文件不存在:报错

    【注】:r+ 模式下,文件可写可读,而且写与读不分先后,即随时都可进行读与写。

    (1)如果先进行读再进行写,就会从文件的开头开始读,再从文件指针的位置开始写

    # ######## 读写模式r+ ########
    f = open(filename, "r+", encoding="utf-8")
    # 先进行写操作,此时文件指针在文件的开头,就从文件开头开始写
    f.write("'utf-8' codec can't decode byte 0xbb")
    # 再进行读操作,此时文件指针移动都刚写入的内容的结尾,从该位置开始读
    print(f.read())
    # 关闭文件
    f.close()

    此时文件 file_test2 的内容:

    'utf-8' codec can't decode byte 0xbb空文件追加模式 a
    文件存在:文件指针置于文件的结尾,新的内容将会被写入到已有内容之后

    代码的输出结果:

    空文件追加模式 a
    文件存在:文件指针置于文件的结尾,新的内容将会被写入到已有内容之后

    (2)如果先进行写再进行读,就会从文件的开头开始写(因为此时文件指针至于文件开头),会覆盖文件指针之后的一部分内容;读文件的时候会从文件指针此时的位置开始读。

    # ######## 读写模式r+ ########
    # 打开文件
    f = open(filename, "r+", encoding="utf-8")
    # 先进行读操作,此时文件指针在文件的开头,就从文件开头开始读
    print(f.read())
    # 再进行写操作,此时文件指针移动文件的结尾,从该位置开始写
    f.write("'utf-8' codec can't decode byte 0xbb")
    # 关闭文件
    f.close()

    此时文件 file_test2 的内容:

    'utf-8' codec can't decode byte 0xbb空文件追加模式 a
    文件存在:文件指针置于文件的结尾,新的内容将会被写入到已有内容之后'utf-8' codec can't decode byte 0xbb

    代码的输出结果:

    'utf-8' codec can't decode byte 0xbb空文件追加模式 a
    文件存在:文件指针置于文件的结尾,新的内容将会被写入到已有内容之后

    5.写读模式 w+

    文件存在:文件指针置于文件的开头,打开一个文件从头开始编辑,原有内容会被删除,写入新数据。

    文件不存在:创建新文件,写入数据

    【注】:

    (1)需要先把内容写进文件,再去读文件,也就是说:保证文件有内容后,通过移动文件指针来读自己想要的部分

    # ######## 读写模式w+ ########
    filename = "file_test3
    f = open(filename, "w+", encoding="utf-8")
    # 先把内容写进文件
    f.write("My name is ElegantSmile")
    # 查看文件文件指针位置:此时在文件的末尾
    print(f.tell())
    # 将文件指针移动到文件的开头,进行读文件
    f.seek(0)
    print(f.read())

    (2)如果文件存在,并且已经有内容,在w+模式下,直接进行读取,原有内容会被删除

    # ######## 读写模式w+ ########
    filename = "file_test3"
    f = open(filename, "w+", encoding="utf-8")
    # 文件中已有内容,此时直接进行读文件操作,文件内容会被删除,并且读不到任何内容
    print(f.read())

    (3)在 w+ 模式下,先写入一部分内容,通过移动文件指针,再进行写入,新的内容会覆盖文件指针之后的原内容

    # 打开文件
    f = open(filename, "w+", encoding="utf-8")
    # 先写入内容
    f.write("My name is ken123")
    # 移动文件指针到 10
    f.seek(10)
    # 输出此时的文件指针位置
    print(f.tell())
    # # 读文件
    # print(f.read())
    # 写入新的数据,此时新的内容会覆盖 文件指针之后的内容
    f.write("
    His name is ElegantSmile")
    print(f.read())
    # 关闭文件
    f.close()

    文件此时的结果:

    My name is
    His name is ElegantSmile

    6.追加读写模式 a+

    文件存在:文件指针置于文件的结尾,以追加模式打开文件,新的内容将会被写入到已有内容之后

    文件不存在:创建新文件,写入数据

     【注】:

    (1)如果先进行写再进行读,就会从文件的结尾开始写(因为此时文件指针至于文件的结尾),新的内容将会被写入到已有内容之后;读文件的时候,需要先移动到初始位置或任意非末尾的位置,再进行读操作

    # ######## 追加读写模式w+ ########
    # 打开文件
    f = open(filename,"a+",encoding="utf-8")
    # 先写入文件
    f.write("
    文件存在:文件指针置于文件的结尾,以追加模式打开文件,新的内容将会被写入到已有内容之后")
    # 此时文件指正位于文件的末尾,需要先移动到初始位置或任意非末尾的位置,再进行读操作
    f.seek(0)
    print(f.read())

    (2) 如果先进行读再进行写,就会从文件的开头开始读,再从文件指针的位置开始写

    # ######## 追加读写模式w+ ########
    # 打开文件
    f = open(filename,"a+",encoding="utf-8")
    # 先进行读操作,此时文件指正位于文件的末尾,需要先移动到初始位置或任意非末尾的位置
    f.seek(0)
    print(f.read())
    # 再写入内容
    f.write("
    文件存在:文件指针置于文件的结尾,以追加模式打开文件,新的内容将会被写入到已有内容之后")

    7.总结

    (1)r,w 以及 r+,w+ 模式下,打开文件后,文件指针至于文件的开头;

    (2)a,a+模式下,打开文件后,文件指针至于文件的结尾;

    (3)无论哪种模式,文件的读操作、写操作都与文件指针的位置有关系,只要搞清楚每一个动作前后的文件指针在哪,就能知道接下来的操作会有什么影响。

  • 相关阅读:
    Leetcode 50.Pow(x,n) By Python
    Leetcode 347.前K个高频元素 By Python
    Leetcode 414.Fizz Buzz By Python
    Leetcode 237.删除链表中的节点 By Python
    Leetcode 20.有效的括号 By Python
    Leetcode 70.爬楼梯 By Python
    Leetcode 190.颠倒二进制位 By Python
    团体程序设计天梯赛 L1-034. 点赞
    Wannafly挑战赛9 C-列一列
    TZOJ Start
  • 原文地址:https://www.cnblogs.com/ElegantSmile/p/10718569.html
Copyright © 2011-2022 走看看