2010-11-28 89 views
2

不知道如何解释这一点,任何帮助将不胜感激!python file.write()需要两次尝试?

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 

谢谢!

回答

10

如果打开thumb文件,你会看到有一个完整拷贝,你是在它写入数据的部分副本。

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

temp.flush() 

该文件不是第一次写入,因为内容不足以填充缓冲区。第二次写入溢出缓冲区,因此写入缓冲区的数据。

正如卡梅伦在他的回答中指出,当你关闭文件缓冲区自动刷新。如果由于某种原因想要保持打开状态(以及这是您的问题似乎表明您已这么做),那么您可以拨打flush并立即写入数据。

2

在检查文件对象的大小之前,您还没有在文件对象上调用flush()close() - 有一个内部缓冲区,只有在写入一定数量的数据后才会自动刷新(这样可以避免过多的做很多写操作时的磁盘)。

+0

谢谢! flush()已经做到了,但是调用close()会删除文件,我假设b/c是一个临时文件。 – 2010-11-28 01:08:31