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) 

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

  • Загрузка дерева каталогов с помощью ftplib
  • Один сервер ftp в python
  • Скрипт Python 2.5 для подключения к FTP и загрузки файла
  • Как сделать Python проверкой, существует ли каталог ftp?
  • Использование Python для того, чтобы знать, когда файл был полностью получен с FTP-источника
  • Загрузка файлов FTP Python
  • Закрыть соединение urllib2
  • Создание FTP-клиента с Python
  • 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

    Поиск низкой энергии Bluetooth с помощью python

    Argparse: Требуемый аргумент 'y', если присутствует 'x'

    Регистрация пользователей Django Rest Framework с дополнительными полями

    python: Как я могу захватить переменную, объявленную в не глобальном внешнем пространстве?

    Как вы проверяете, что что-то случайное? Или «достаточно случайным»?

    Что делать с «Неожиданным отступом» в python?

    извлекать верхнюю / нижнюю треугольную часть матричной матрицы?

    как создать график / диаграмму, например, поток посетителей Google Analytics?

    Python 3 – Zip – это итератор в кадре данных pandas

    Не удалось импортировать настройки «myproject.settings» (это на sys.path?): Нет модуля с именем pinax

    python: как завершить поток при завершении основной программы

    Как протестировать приложение django, помещенное в подпапку?

    Python – downsampling wav аудиофайл

    NLTK regexp tokenizer не играет хорошо с десятичной точкой в ​​регулярном выражении

    Используйте Python pool.map, чтобы несколько процессов выполняли операции над списком

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