Я получаю файл (* .png) через сеть, и этот файл записывается (в двоичном режиме) на жесткий диск должным образом.Чтение файла получает EOF до реального EOF
Когда я пытаюсь открыть файл, для дальнейших манипуляций он не будет полностью загружать нижнюю часть png-изображения. Это происходит с несколькими файлами PNG, поэтому это не изолированный случай.
#File received a properly written to HDD
fp = open(os.path.join(self.savedir, filename), 'wb')
fp.write(part.get_payload(decode=True))
print fp.tell() # prints correct size, in this case: 343661bytes
fp.close
# Reads the data in the file but not till the real EOF
fin = open(os.path.join(self.savedir, filename), 'rb')
data = fin.read()
print len(data) # prints 339968
print fin.tell() # prints correct size, in this case: 339968bytes
fin.close
Я использую Python 2.7.9, как на Linux (64bits) и окна (32бит) поведение одинаково на обеих машинах. Эти снайперы кода, где в разных функциях теперь находятся, как показано выше рядом друг с другом для проверки работоспособности. Очевидно, что файл обрабатывается только этой программой, и нет никаких потоков concorrent для любого, кто имеет дело с файлом.
Почему вы используете 'decode = True'? Если это бинарный поток, не стоит ли просто писать его как есть? – bosnjak
Это не может быть ваш настоящий код, потому что он просто поднимет «IndentationError». – abarnert
Лучше открыть файлы с помощью ['with'] (https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects) (см., Например, конец раздела). Это гарантирует, что файл будет закрыт должным образом. –