设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 7683|回复: 2
打印 上一主题 下一主题

文件读写中r+ 模式为什么会出现如下结果呢?

[复制链接]

6

主题

0

好友

218

积分

中级会员

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2020-3-26 20:28:25 |显示全部楼层 |倒序浏览
本帖最后由 风风魔王 于 2020-3-27 09:30 编辑

#test.txt内容
123
456
789
代码如下:

f = open('test.txt', 'r+')
print(f.tell(), end = ' ')
f.write('000\n')
print(f.tell(), end = ' ')
f.readline()
print(f.tell(), end = ' ')
f.write('999')
print(f.tell(), end = ' ')
f.close()


输出结果是

0 5 10 16
而test.txt也被修改为了
000
456
789999
但是代码如果改成(仅仅是把write和readline之间的f.tell()去掉了,结果就大相径庭

f = open('test.txt', 'r+')
print(f.tell(), end = ' ')
f.write('000\n')
f.readline()
print(f.tell(), end = ' ')
f.write('999')
print(f.tell(), end = ' ')
f.close()

输出结果是0 10 21

而text.txt居然被修改成了
123
456
789000
999
请问先生这是什么情况?为什么连第一个write()写的内容都被添加到文件末尾了?
回复

使用道具 举报

6

主题

0

好友

218

积分

中级会员

Rank: 3Rank: 3

沙发
发表于 2020-3-27 09:33:27 |显示全部楼层
本帖最后由 风风魔王 于 2020-3-27 09:35 编辑

我已经凌乱了,随便试试就有令人意想不到的记结果
如果一开始使用seek的话,那么紧接着的写入也会写到最后面,readline()操作之后使用seek 又可以实现写在自己想写的位置了,python的文件指针也太令人摸不着头脑了吧
f = open('test.txt', 'r+)
print(f.tell(), end = ' ')
f.seek(0)
print(f.tell(), end = ' ')
f.write('000\n')
f.readline()
print(f.tell(), end = ' ')
f.seek(1)
print(f.tell(), end = ' ')
f.write('999')
print(f.tell(), end = ' ')

f.close()


输出结果是 0 0 10 1 4

修改后的文件是
1999456
789000
回复

使用道具 举报

6

主题

0

好友

218

积分

中级会员

Rank: 3Rank: 3

板凳
发表于 2020-3-28 15:40:53 |显示全部楼层
crossin先生 发表于 2020-3-27 19:34
是比较绕,给你个参考:
https://www.cnblogs.com/huahuayu/p/8093867.html

先生太强了,谢谢先生,刚学到文件读写这里困扰两天了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-2 12:27 , Processed in 0.016593 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部