在使用文件模式操作时,发现几种模式的作用依然分不清楚,所以就自己实践了一下,查看具体的效果。目前以用的四种’w’, ‘w+’, ‘r’, ‘r+’为主,如果后期遇到不同的模式,可以继续实践下去。
结论
- w用法
- 打开文件,如果不存在文件,则会自动创建
- 使用write()进行写入时,会将原文件内容覆盖掉。
- w+用法
- 打开文件,如果文件不存在,会自动创建文件
- 使用write()、read()函数进行相关操作时,原文件内容就会被覆写;
- 打开文件后,使用write()函数写入,再read()时,需考虑指针位置;先用seek()函数将指针放到指定位置,read()会读取指针后的文件内容。
- r用法
- 打开文件,如果文件不存在会报错;
- 使用read()函数进行读取操作,不能进行写入操作
- r+用法
- 理论上w打开文件,如果文件存在直接将文件打开,如果不存在则会创建新的文件,所创建文件如下图。
>>> with open('abcname.txt', 'w')as f:
f.write('hello world')
- 首先使用write()模式进行写入操作,所使用文件为空。
- 新建空文件
通过’w’模式打开文件,并写入’hello world!’
with open(r"E:\practice_txt\20200223-1.txt", 'w') as f:
f.write('hello world')
运行后打开文件:已写入
- 在上述代码的基础上进行读取操作:文件报错,显示为不可读取(not readable)。
with open(r"E:\practice_txt\20200223-1.txt", 'w') as f:
f.write('hello world')
f.read()
===================== RESTART: E:/practice_py/20200223-1.py ====================
Traceback (most recent call last):
File "E:/practice_py/20200223-1.py", line 3, in <module>
f.read()
io.UnsupportedOperation: not readable
- 如果文本中有内容,使用write()进行写入操作
- 新建文件文档,并输入内容:hello world
使用write()函数在文件中写入:ni hao zhong guo
with open(r"E:\practice_txt\20200223-1.txt", 'w') as f:
f.write('ni hao zhong guo')
运行函数发现,之前文字被覆盖,
- 可能因字符串内容多于文本文档的内容,导致遮蔽的内容,而不是全部覆写。
排除是否因字符串内容过程,导致的覆盖。
with open(r"E:\practice_txt\20200223-1.txt", 'w') as f:
f.write('ab')
运行后,文件内容被全部覆写
w+ 用法
- 文件中有文字,进行读取操作
- 文件中有文字:hello word
使用w+模式打开,并进行读取
with open(r"E:\practice_txt\20200223-1.txt", 'w+') as f:
f.read()
运行后,文件夹变空
- 文件中有文字,进行写入操作
- 文件中包含文字hello world
使用write()函数写入字符串
with open(r"E:\practice_txt\20200223-1.txt", 'w+') as f:
f.write('ni hao zhong guo')
运行后,原文字被覆盖。
- 在此基础上,使用read()函数进行读取操作:返回值为空;文件内容为发生改变。
with open(r"E:\practice_txt\20200223-1.txt", 'w+') as f:
f.write('ni hao zhong guo')
print(f.read())
===================== RESTART: E:/practice_py/20200223-1.py ====================
>>>
文件内容
- 进行读取操作,使用seek()指针归0
with open(r"E:\practice_txt\20200223-1.txt", 'w+') as f:
f.write('ni hao zhong guo')
f.seek(0)
print(f.read())
>>>
===================== RESTART: E:/practice_py/20200223-1.py ====================
ni hao zhong guo
r用法(读取模式)
- 使用read()函数进行读取操作
- 文件中包含内容
使用read()函数读取
with open(r"E:\practice_txt\20200223-1.txt", 'r') as f:
print(f.read())
===================== RESTART: E:/practice_py/20200223-1.py ====================
hello world
使用write()写入
with open(r"E:\practice_txt\20200223-1.txt", 'r') as f:
print(f.read())
f.write('ni hao zhong guo')
===================== RESTART: E:/practice_py/20200223-1.py ====================
hello world
Traceback (most recent call last):
File "E:/practice_py/20200223-1.py", line 3, in <module>
f.write('ni hao zhong guo')
io.UnsupportedOperation: not writable
r+用法
- 使用read()函数进行读取操作
- 文件中包含内容
- 运行结果,正常读取
with open(r"E:\practice_txt\20200223-1.txt", 'r+') as f:
print(f.read())
===================== RESTART: E:/practice_py/20200223-1.py ====================
hello world
- 使用write()函数进行写入操作
运行write()函数进行写入
with open(r"E:\practice_txt\20200223-1.txt", 'r+') as f:
print(f.read())
f.write('ni hao zhong guo')
===================== RESTART: E:/practice_py/20200223-1.py ====================
hello world
发现在原文档后面,增加了写入的文件
- 核实写入文件的位置
写入文件后读取,读取部分文件
with open(r"E:\practice_txt\20200223-1.txt", 'r+') as f:
f.write('ni hao zhong guo')
print(f.read())
===================== RESTART: E:/practice_py/20200223-1.py ====================
o zhong guo
查看文件后,指针位置以后的