ftp.retrbinary () help python

Я создал скрипт python для подключения к remserver.

datfile = [] for dk in range(len(files)): dfnt=files[dk] dpst=dfnt.find('.dat') if dpst == 15: dlist = dfnt[:] datfile.append(dlist) assert datfile == ['a.dat','b.dat'] # True 

который, как вы можете видеть, создает список. теперь я передаю этот список

 ftp.retrbinary('datfile') 

но эти строки возвращают ошибку:

 typeerror: retrbinary() takes at least 3 arguments (2 given) 

не уверен, что ищет?

One Solution collect form web for “ftp.retrbinary () help python”

Это говорит вам, что вы не доставляете достаточно аргументов для метода retrbinary .

В документации указано, что вы также должны предоставить функцию «обратного вызова», которая вызывается для каждого блока полученных данных. Вы захотите написать функцию обратного вызова и сделать что-то с данными, которые она дает вам (например, записать их в файл, собрать в памяти и т. Д.).

В качестве побочной заметки вы можете спросить, почему она говорит, что вместо «2» требуются только «3» аргументы. Это связано с тем, что он также учитывает аргумент «я», который Python требует для методов экземпляра, но вы неявно передаете это с ссылкой на объект ftp .

EDIT – Похоже, я, возможно, не полностью ответил на ваш вопрос.

Для аргумента command вы должны передавать действительную команду RETR, а не список.

 filenames = ['a.dat', 'b.dat'] # Iterate through all the filenames and retrieve them one at a time for filename in filenames: ftp.retrbinary('RETR %s' % filename, callback) 

Для callback вам нужно передать что-то вызываемое (обычно это функция какого-то типа), которая принимает один аргумент. Аргумент – это кусок данных из извлекаемого файла. Я говорю «кусок», потому что, когда вы перемещаете большие файлы, вы редко хотите хранить весь файл в памяти. Библиотека предназначена для повторного вызова вашего обратного вызова, поскольку он получает куски данных. Это позволяет записывать фрагменты файла, поэтому вам нужно хранить только относительно небольшой объем данных в памяти в любой момент времени.

Мой пример здесь немного расширен, но ваш обратный вызов может быть закрытием внутри цикла for, который записывает в файл, который был открыт:

 import os filenames = ['a.dat', 'b.dat'] # Iterate through all the filenames and retrieve them one at a time for filename in filenames: local_filename = os.path.join('/tmp', filename) # Open a local file for writing (binary mode)... # The 'with' statement ensures that the file will be closed with open(local_filename, 'wb') as f: # Define the callback as a closure so it can access the opened # file in local scope def callback(data): f.write(data) ftp.retrbinary('RETR %s' % filename, callback) 

Это также можно сделать более кратко с помощью оператора lambda , но я нахожу новых людей для Python, и некоторые из его концепций функционального стиля легче понять первый пример. Тем не менее, вот ftp-вызов с лямбдой:

 ftp.retrbinary('RETR %s' % filename, lambda data: f.write(data)) 

Я полагаю, вы могли бы это сделать, передав метод экземпляра write непосредственно в качестве обратного вызова:

 ftp.retrbinary('RETR %s' % filename, f.write) 

Все три из этих примеров должны быть аналогичными, и, надеюсь, отслеживание их поможет вам понять, что происходит.

В качестве примера я воспользовался обработкой ошибок.

Кроме того, я не тестировал ни один из вышеуказанных кодов, поэтому, если он не работает, дайте мне знать, и я посмотрю, смогу ли я это прояснить.

Interesting Posts

вложенное понимание списка с помощью os.walk

win32com.client.Dispatch + Cherrypy = CoInitialize не был вызван

Атрибут Python Ошибка при запуске скрипта: тип объекта «BaseCommand» не имеет атрибута «option_list»

Как применяются требования deques в Python, и когда они хуже, чем списки?

Принудительно импортировать модуль из текущего каталога

Получение недопустимой ошибки изображения в Django, но PIL установлен и проходит все тесты

Как печатать функции по мере их вызова

сохранить несколько загруженных файлов в django

Функция построения трех измерений по заданной области с помощью matplotlib

Программа Python для обнаружения пересечения одномерных сегментов линии

Скопировать данные Из спортивной таблицы с использованием Python и Beautiful soup

Активировать virtualenv с помощью скрипта python

Точное совпадение нескольких слов в whoosh

Странное поведение.

Pycharm: установить переменную среды для запуска manage.py Task

Python - лучший язык программирования в мире.