在使用文件模式操作时,发现几种模式的作用依然分不清楚,所以就自己实践了一下,查看具体的效果。目前以用的四种’w’, ‘w+’, ‘r’, ‘r+’为主,如果后期遇到不同的模式,可以继续实践下去。

结论

  • w用法
    • 打开文件,如果不存在文件,则会自动创建
    • 使用write()进行写入时,会将原文件内容覆盖掉。
  • w+用法
    • 打开文件,如果文件不存在,会自动创建文件
    • 使用write()、read()函数进行相关操作时,原文件内容就会被覆写;
    • 打开文件后,使用write()函数写入,再read()时,需考虑指针位置;先用seek()函数将指针放到指定位置,read()会读取指针后的文件内容。
  • r用法
    • 打开文件,如果文件不存在会报错;
    • 使用read()函数进行读取操作,不能进行写入操作
  • r+用法
    • 能够执行读取文件
    • 能够执行写入操作,但是写入时是在指针后开始写入,然后覆盖指针后内容。

      w用法(写入模式)

  1. 理论上w打开文件,如果文件存在直接将文件打开,如果不存在则会创建新的文件,所创建文件如下图。
  1. >>> with open('abcname.txt', 'w')as f:
  2. f.write('hello world')

image.png

  1. 首先使用write()模式进行写入操作,所使用文件为空。
  • 新建空文件

image.png

  • 通过’w’模式打开文件,并写入’hello world!’

    1. with open(r"E:\practice_txt\20200223-1.txt", 'w') as f:
    2. f.write('hello world')
  • 运行后打开文件:已写入

image.png

  • 在上述代码的基础上进行读取操作:文件报错,显示为不可读取(not readable)。
    1. with open(r"E:\practice_txt\20200223-1.txt", 'w') as f:
    2. f.write('hello world')
    3. f.read()
    4. ===================== RESTART: E:/practice_py/20200223-1.py ====================
    5. Traceback (most recent call last):
    6. File "E:/practice_py/20200223-1.py", line 3, in <module>
    7. f.read()
    8. io.UnsupportedOperation: not readable
  1. 如果文本中有内容,使用write()进行写入操作
  • 新建文件文档,并输入内容:hello world

image.png

  • 使用write()函数在文件中写入:ni hao zhong guo

    1. with open(r"E:\practice_txt\20200223-1.txt", 'w') as f:
    2. f.write('ni hao zhong guo')
  • 运行函数发现,之前文字被覆盖,

image.png

  1. 可能因字符串内容多于文本文档的内容,导致遮蔽的内容,而不是全部覆写。
  • 排除是否因字符串内容过程,导致的覆盖。

    1. with open(r"E:\practice_txt\20200223-1.txt", 'w') as f:
    2. f.write('ab')
  • 运行后,文件内容被全部覆写

image.png

w+ 用法

  1. 文件中有文字,进行读取操作
  • 文件中有文字:hello word

image.png

  • 使用w+模式打开,并进行读取

    1. with open(r"E:\practice_txt\20200223-1.txt", 'w+') as f:
    2. f.read()
  • 运行后,文件夹变空

image.png

  1. 文件中有文字,进行写入操作
  • 文件中包含文字hello world

image.png

  • 使用write()函数写入字符串

    1. with open(r"E:\practice_txt\20200223-1.txt", 'w+') as f:
    2. f.write('ni hao zhong guo')
  • 运行后,原文字被覆盖。

image.png

  • 在此基础上,使用read()函数进行读取操作:返回值为空;文件内容为发生改变。
    1. with open(r"E:\practice_txt\20200223-1.txt", 'w+') as f:
    2. f.write('ni hao zhong guo')
    3. print(f.read())
    4. ===================== RESTART: E:/practice_py/20200223-1.py ====================
    5. >>>

文件内容
image.png

  • 进行读取操作,使用seek()指针归0
    1. with open(r"E:\practice_txt\20200223-1.txt", 'w+') as f:
    2. f.write('ni hao zhong guo')
    3. f.seek(0)
    4. print(f.read())
    5. >>>
    6. ===================== RESTART: E:/practice_py/20200223-1.py ====================
    7. ni hao zhong guo

r用法(读取模式)

  1. 使用read()函数进行读取操作
  • 文件中包含内容

image.png

  • 使用read()函数读取

    1. with open(r"E:\practice_txt\20200223-1.txt", 'r') as f:
    2. print(f.read())
    3. ===================== RESTART: E:/practice_py/20200223-1.py ====================
    4. hello world
  • 使用write()写入

    1. with open(r"E:\practice_txt\20200223-1.txt", 'r') as f:
    2. print(f.read())
    3. f.write('ni hao zhong guo')
    4. ===================== RESTART: E:/practice_py/20200223-1.py ====================
    5. hello world
    6. Traceback (most recent call last):
    7. File "E:/practice_py/20200223-1.py", line 3, in <module>
    8. f.write('ni hao zhong guo')
    9. io.UnsupportedOperation: not writable

r+用法

  1. 使用read()函数进行读取操作
  • 文件中包含内容

image.png

  • 运行结果,正常读取
    1. with open(r"E:\practice_txt\20200223-1.txt", 'r+') as f:
    2. print(f.read())
    3. ===================== RESTART: E:/practice_py/20200223-1.py ====================
    4. hello world
  1. 使用write()函数进行写入操作
  • 运行write()函数进行写入

    1. with open(r"E:\practice_txt\20200223-1.txt", 'r+') as f:
    2. print(f.read())
    3. f.write('ni hao zhong guo')
    4. ===================== RESTART: E:/practice_py/20200223-1.py ====================
    5. hello world
  • 发现在原文档后面,增加了写入的文件

image.png

  1. 核实写入文件的位置
  • 写入文件后读取,读取部分文件

    1. with open(r"E:\practice_txt\20200223-1.txt", 'r+') as f:
    2. f.write('ni hao zhong guo')
    3. print(f.read())
    4. ===================== RESTART: E:/practice_py/20200223-1.py ====================
    5. o zhong guo
  • 查看文件后,指针位置以后的

image.png