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