Crossin的编程教室
标题:
文件读写中r+ 模式为什么会出现如下结果呢?
[打印本页]
作者:
风风魔王
时间:
2020-3-26 20:28
标题:
文件读写中r+ 模式为什么会出现如下结果呢?
本帖最后由 风风魔王 于 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()写的内容都被添加到文件末尾了?
作者:
风风魔王
时间:
2020-3-27 09:33
本帖最后由 风风魔王 于 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
作者:
crossin先生
时间:
2020-3-27 19:34
是比较绕,给你个参考:
https://www.cnblogs.com/huahuayu/p/8093867.html
文件r+ open:
1. write()不能实现插入写,它总是覆盖写或附加写;
2. 如果文件一打开即write(),则从开头覆盖写;
3. 如果文件一打开,用f.seek()指定文件指针位置,然后执行f.write()则从指针位置写(覆盖写);
4. 如文件打开后先执行了readline(), 然后再执行write(),实现的是附加写
另外从实际角度来说就是,尽量不要用r+,并没有一定用它的必要,反倒会引入一堆不确定
作者:
风风魔王
时间:
2020-3-28 15:40
crossin先生 发表于 2020-3-27 19:34
是比较绕,给你个参考:
https://www.cnblogs.com/huahuayu/p/8093867.html
先生太强了,谢谢先生,刚学到文件读写这里困扰两天了!
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/)
Powered by Discuz! X2.5