Python file.write()需要两次尝试?

时间:2010-11-28 00:59:32

标签: python file-io

不确定如何解释这一点,任何帮助将不胜感激!

Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib2, pynotify, tempfile, os
>>> opener = urllib2.build_opener()
>>> page = opener.open('http://img.youtube.com/vi/RLGJU_xUVTs/1.jpg')
>>> thumb = page.read()
>>> temp = tempfile.NamedTemporaryFile(suffix='.jpg')
>>> temp.write(thumb)
>>> os.path.getsize(temp.name)
0
>>> temp.write(thumb)
>>> os.path.getsize(temp.name)
4096

谢谢!

2 个答案:

答案 0 :(得分:10)

如果您打开thumb文件,您会看到有一个完整副本和您正在其中写入的数据的部分副本。

刷新文件而不是第二次写入。

temp.flush()

文件第一次没有写入,因为内容不够大,无法填充缓冲区。第二次写入溢出缓冲区,因此写入缓冲区的数据。

Cameron在回答中指出,关闭文件时会自动刷新缓冲区。如果你想出于某种原因让它保持打开(事实上这对你来说似乎表明你这么做了),那么你可以调用flush并立即写入数据。

答案 1 :(得分:2)

在检查磁盘上的大小之前,您没有在文件对象上调用flush()close() - 只有在写入一定量的数据后才会自动刷新内部缓冲区(这可以避免在进行多次写入时过多昂贵的磁盘访问。)