返回信息流print "opening files..."
target = open(filename,'r+')
target.write("hello\nbye\n")
print "read file"
print target.read()
print "close file"
target.close()
为什么文件出来的乱码
这是一条镜像帖。来源:北邮人论坛 / python / #4389同步于 2014/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
[问题]python文件读写
LoveXY
2014/11/22镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
这问题问得好。
Python官方文档没有清晰地说明r+的确切语义(楼主应该找Python官方开发人员报bug)。
C语言(C11)的标准说,如果用r+或者w+,文件既可读又可写,但是先写后读的时候,读写之间必须用定位函数(fseek, fsetpos, rewind),对应到Python里就是seek方法。所以,如果在C语言里对于r+的文件先写后读而中间没有定位,那么什么都可能发生。
OSX的man pages对read和write系统调用的描述是,文件总保持一个“当前位置”。对于可以seek的文件(普通文件就可以),读和写都会让这个当前位置前进真正读出或写入的字节数。所以,先写然后再读,读到的是“你写入的最后一个字节之后开始,直到文件结尾,的这部分内容”。
所以,答案是:Python里又读又写会发生什么事,谁也说不清楚。
暖神好顶赞!
【 在 nuanyangyang 的大作中提到: 】
: 这问题问得好。
: Python官方文档没有清晰地说明r+的确切语义(楼主应该找Python官方开发人员报bug)。
: C语言(C11)的标准说,如果用r+或者w+,文件既可读又可写,但是先写后读的时候,读写之间必须用定位函数(fseek, fsetpos, rewind),对应到Python里就是seek方法。所以,如果在C语言里对于r+的文件先写后读而中间没有定位,那么什么都可能发生。
: ...................
此时的读,应该是文件中len("hello\nbye\n") 长度之后的数据,你可以看一看原来文件这么多长度后是什么东西,如果原来文件少于这个长度,后面应该读不出东西!