Python file.write (), делающий две попытки? - PullRequest
2 голосов
/ 28 ноября 2010

не уверен, как это объяснить, любая помощь будет оценена!

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

спасибо! * * 1004

Ответы [ 2 ]

10 голосов
/ 28 ноября 2010

Если вы откроете файл thumb, вы увидите, что в нем есть одна полная копия и частичная копия данных, которые вы записываете.

сбросьте файл вместо записи во второй раз,

temp.flush()

Файл не записывался в первый раз, потому что содержимое недостаточно велико для заполнения буфера.Вторая запись переполняет буфер, и таким образом записывается ценность данных буфера.

Как указывает Кэмерон в своем ответе, буфер автоматически очищается при закрытии файла.Если по какой-то причине вы хотите оставить его открытым (и тот факт, что это проблема для вас, похоже, указывает на то, что вы это делаете), вы можете позвонить по номеру flush, и данные будут сразу же записаны.

2 голосов
/ 28 ноября 2010

Вы не вызывали flush() или close() для файлового объекта до проверки его размера на диске - существует внутренний буфер, который автоматически сбрасывается только после записи определенного объема данных (это позволяет избежать слишком большого количествадорогие поездки на диск при много записи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...