关于文件读写的问题。

雪团老四 2017-12-06 06:20:32
代码如下,我本想将我输入到文档中的三行文字在最后显示出来,结果输出中并没有出现,请问是什么原因啊?


结果如下
...全文
151 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪团老四 2017-12-07
  • 打赏
  • 举报
回复
引用 4 楼 xpresslink 的回复:
[quote=引用 2 楼 Thestate 的回复:] [quote=引用 1楼混沌鳄鱼 的回复:]运行完脚本用记事本打开就能看到了。 因为文件 一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。 在Windows下默认缓冲区大小是1024字节,只有凑够了字节数才会做一次磁盘写入。 或者在第34行加一句 target.flush() flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。
如果我在读出之前将文档close了,在打开读出是不是就没问题了呢?[/quote] 是的[/quote] 我照你的方式试了,还是不行啊。
引用 6 楼 xpresslink 的回复:
不好意思, 我忽略了文件指针问题。 写入操作之后文件指针处在文件的结尾,要稳动到前面才能读到已经写入的内容。

>>> f = open('d:/sharefolder/temp.txt', 'w+')
>>> f.write('dfaf')
4
>>> f.read()
''
>>> f.flush()
>>> f.read()
''
>>> f.seek(0)
0
>>> f.read()
'dfaf'
>>> 

我刚刚操作了一下,确实是seek()可以解决的问题,而且不需要flush()就可以输出,不知道是不是版本的原因。
extend 2017-12-07
  • 打赏
  • 举报
回复
你第16行已经把target关闭了。后面不能再写了。
混沌鳄鱼 2017-12-07
  • 打赏
  • 举报
回复
不好意思, 我忽略了文件指针问题。 写入操作之后文件指针处在文件的结尾,要稳动到前面才能读到已经写入的内容。

>>> f = open('d:/sharefolder/temp.txt', 'w+')
>>> f.write('dfaf')
4
>>> f.read()
''
>>> f.flush()
>>> f.read()
''
>>> f.seek(0)
0
>>> f.read()
'dfaf'
>>> 

雪团老四 2017-12-07
  • 打赏
  • 举报
回复
引用 1楼混沌鳄鱼 的回复:
运行完脚本用记事本打开就能看到了。 因为文件 一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。 在Windows下默认缓冲区大小是1024字节,只有凑够了字节数才会做一次磁盘写入。 或者在第34行加一句 target.flush() flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。
我照你的方法试了,还是不行啊。
混沌鳄鱼 2017-12-06
  • 打赏
  • 举报
回复
引用 2 楼 Thestate 的回复:
[quote=引用 1楼混沌鳄鱼 的回复:]运行完脚本用记事本打开就能看到了。 因为文件 一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。 在Windows下默认缓冲区大小是1024字节,只有凑够了字节数才会做一次磁盘写入。 或者在第34行加一句 target.flush() flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。
如果我在读出之前将文档close了,在打开读出是不是就没问题了呢?[/quote] 是的
extend 2017-12-06
  • 打赏
  • 举报
回复
你数据写缓存区了,在target.read前,target.flush() 或者,先关了文件再打开读。
雪团老四 2017-12-06
  • 打赏
  • 举报
回复
引用 1楼混沌鳄鱼 的回复:
运行完脚本用记事本打开就能看到了。 因为文件 一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。 在Windows下默认缓冲区大小是1024字节,只有凑够了字节数才会做一次磁盘写入。 或者在第34行加一句 target.flush() flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。
如果我在读出之前将文档close了,在打开读出是不是就没问题了呢?
混沌鳄鱼 2017-12-06
  • 打赏
  • 举报
回复
运行完脚本用记事本打开就能看到了。 因为文件 一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。 在Windows下默认缓冲区大小是1024字节,只有凑够了字节数才会做一次磁盘写入。 或者在第34行加一句 target.flush() flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。

37,717

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧