ftp read () Ошибка памяти в python - PullRequest
0 голосов
/ 19 мая 2011

Я получаю сообщение об ошибке «Ошибка памяти» при открытии и чтении файла размером более 500 МБ. если его меньше, чем 500 МБ, он работает отлично .. я использую размер для максимального значения моего индикатора выполнения

    self.ftp = FTP(hostname)
    self.ftp.login(user, password)
    self.f = open(self.filename,'rb')

    with open(self.filename,'rb') as filein:
        self.size = filein.read()

    self.size = len(self.size)

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Итак, filein.read () фактически читает (то есть загружает) файл и использует вашу память.
Вместо этого вы можете использовать

self.size = self.ftp.size(self.filename)
0 голосов
/ 19 мая 2011

Не используйте метод read(), поскольку он считывает весь файл в строку. Вы должны использовать функцию os.stat(), чтобы получить метаданные файла, которые возвращают структуру статистики с членом st_size. Это размер в байтах файла. Вам не нужно сначала читать все это.

Для отправки, также читайте и записывайте кусками (скажем, 16 КБ), в цикле.

...