.write()后,seek(0)&'a+' 的文件指针问题

我的代码问题:

 1 from sys import argv
 2
 3 script,filename=argv
 4 
 5 line1=input('type someother code:'+'\n'+'>')
 6 line2=input('please type some code:'+'\n'+'>')
 7 line3=input('please append some code:'+'\n'+'>')
 8 t1=open(filename,'w+')
 9 t1.write(line1+'\n')
10 t1.write(line2+'\n')
11    #此行我第二次加入一句t1.seek(0),程序就一切如预期了,不解。。。
12 t0=open(filename,'a+')
13 t0.write(line3)
14 t0.seek(0)
15 print('The Final result:\n%s'%t0.read())
16
17 t1.close
18 t0.close

运行结果:>py testing.py test.txt

type someother code:
.>>>this line 1
please type some code:
.>>>this is line 2
please append some code:
.>>>this is append line
The Final result:
this is append line

testing.txt 写入文件内容:

this is line 1
this is line 2

很奇怪~ 最后一行this is append line没有写入文件,而print(t0.read())却只打印出最后一行?


我胡乱试,偶尔在第11行加入了一条t1.seek(0)后,一切如我预期了(print正常打印出testing.txt的全部内容了,testing.txt也被正常写入了三条input(str))

虽然代码通过了,但是原因我还是不懂~求教

t1.seek(0) 作用是将指针移回文件开头,我在第14行写它是因为接下来我要print全部文件内容,而write后,指针指向了文件尾部,此时read只能读出空。 但12行我在文件末尾用'a+'模式追加一句str,文件指针指向哪应该都无所谓啊?'a+'模式不是强行在文件尾部添加str嘛?为什么出错?? 而我在12行前加一句t1.seek(0)就OK了~ 实在不解。
阅读 3k
2 个回答

我试验了一下,大概明白了为什么。你也可以在代码中用f.tell()来监测指针的位置。
按照我的理解,你的t1以“w+”的模式打开了一个文件filename,t1的指针在文件的开头,然后进行了一系列write操作。但是要注意,此时数据只是写入了一个缓存区,并没有真正写入filename。
接着以“a+”的模式打开了一个t0,它的指针在文件的结尾(最初的filename的结尾),所以对t0进行write操作也是从t0的指针位置开始的。这么一说不知你明白了没有

其实最好是写完关掉,再打开追加, 或者至少flush一下缓冲区,猜测是因为不同的open, 会建立不同的缓冲区, 这样对同一个文件操作,会对文件内容意外覆盖

from sys import argv
script,filename=argv

line1=input('type someother code:'+'\n'+'>')
line2=input('please type some code:'+'\n'+'>')
line3=input('please append some code:'+'\n'+'>')
t1=open(filename,'w+')
t1.write(line1+'\n')
t1.write(line2+'\n')
t1.flush()
t1.close()

t0=open(filename,'a+')
t0.write(line3)
t0.flush()
t0.seek(0)
print('The Final result:\n%s'%t0.read())
t0.close()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题