最近学习python时,发现r+(读写)模式先读和先写,写入的位置不一致,经过测试发现:
1、先写后读,写从文件开头开始写(覆盖原文),读从写入末尾开始读;
2、先读后写,读从文件开头开始读,写从文件末尾开始写。
点击查看代码
'''
test.txt
#####随便写点啥######
'''
# 先写后读
with open('test.txt', 'r+', encoding='utf8') as f:
f.write('write')
print('after write', f.tell())
print(f.readline())
print('after read', f.tell())
'''
运行结果
after write 5
随便写点啥######
after read 28
test.txt
write随便写点啥######
'''
# 先读后写
with open('test.txt', 'r+', encoding='utf8') as f:
print(f.readline())
print('after read', f.tell())
f.write('write')
print('after write', f.tell())
'''
运行结果
#####随便写点啥######
after read 26
after write 31
test.txt
#####随便写点啥######write
'''
一开始不是很理解为什么会有区别,后来想起来r+应该是 先读后写 ,也就能解释通了,设计就是先从文件开头读,再从文件末尾写,为了不让写入覆盖原文件,但是反其道行之就不会从文件末尾写了(一开始我以为也会),可能设计时没想到有人会用r+先写,或者就是故意的,让你不按套路出牌XD。
ps:python版本3.9.4