鱼C论坛

 找回密码
 立即注册
查看: 1614|回复: 4

关于open() 中 ‘r+’ 模式的困惑,请大家帮忙!

[复制链接]
发表于 2020-3-11 16:22:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:我在open() 的 'r+' 模式的思考学习中,发现有些时候开发工具得出的结果和我想的不一样,如下所示:
# read() 中有参数
file_path='D:\PythonTest\FishC\Demo.txt'
f1=open(file_path,'r+',encoding='UTF-8') # 123456
print(f1.tell()) # 0
f1.write('abc') # 123456abc
print(f1.read(3))   # 123
f1.close()
Demo.txt 文本中的内容是'123456',依据上面的代码,按道理来说,Demo.txt 中添加的字符串,应该覆盖 '123',但是它是被追加在文末;并且下一步 read(3),应该读取 '456' ,
开发工具反而显示 '123' ,这让我很困惑,希望得到大家的帮助。
【备注:注释部分是开发工具中显示的每步答案】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-11 16:24:18 | 显示全部楼层
其实,三种混合模式'r+' 'w+'  'a+' 偶尔也会出现类似问题,我不知道为什么会这样,按道理书签不是随着读、写操作移动位置么,这里移动的完全不合理啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 17:07:02 | 显示全部楼层
你这样看一下指针的位置
# read() 中有参数
file_path = r'D:\PythonTest\FishC\Demo.txt'
f1 = open(file_path, 'r+', encoding='UTF-8')  # 123456
print(f1.tell())  # 0
f1.write('abc')  # 123456abc
print(f1.tell())
print(f1.read(3))  # 123
f1.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 17:11:33 | 显示全部楼层
zltzlt 发表于 2020-3-11 17:07
你这样看一下指针的位置

您这样的代码我也试过,问题就是:多一句提示指针,怎么结果就完全不一样了,这里面逻辑说不通啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 17:13:48 | 显示全部楼层
zltzlt 发表于 2020-3-11 17:07
你这样看一下指针的位置

我之前试过,好像 read() 方法中不添加参数,三种'r+' 'w+' 'a+' 混合模式,无论是先读后写,还是先写后读,都不会造成指针混乱,但是一旦输入 size 参数,就出问题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表