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

  • 相关阅读:
    【LDAP】LDAP 中 CN, OU, DC 的含义
    【LDAP】LDAP介绍
    【LDAP】Openldap导入数据
    【LDAP】LDAP常用命令解析
    【Linux】debian 7 安装 rz sz lrzsz
    【Linux】Debian 8 设置命令行界面的文本颜色
    【Linux】Debian vim没有颜色的解决办法
    【计算机网络】一步一步学习IP路由流程
    【密码学】RSA密钥长度、明文长度和密文长度
    【密码学】CSP的概念
  • 原文地址:https://www.cnblogs.com/ElegantSmile/p/10718569.html
Copyright © 2011-2022 走看看