Нет при попытке использовать pysftp для получения файла

Мне нужно получить файлы с сервера и затем записать их в базу данных. Я использую:

with pysftp.Connection(host, username=username, password=password, cnopts=cnopts) as sftp:
    sftp.chdir('path')
    all_files = [file_name for file_name in sftp.listdir() if 'access' in file_name]
    today_log = all_files[0]
    all_files = all_files[1:]
    df = df.append(sftp.get(str(today_log)))

Но возвращает None. Как я могу получить контент из файла и записать его в фрейм данных?


person Petr Petrov    schedule 01.06.2017    source источник
comment
Что возвращает None?   -  person martineau    schedule 01.06.2017
comment
@martineau содержимое файла пусто и возвращает None, но не пусто. Мне нужно прочитать это и добавить в фрейм данных   -  person Petr Petrov    schedule 01.06.2017
comment
Какое значение имеет all_files?   -  person errata    schedule 01.06.2017
comment
@errata Это список. Я фильтрую список в каталоге и затем добавляю его имя в sftp.get()   -  person Petr Petrov    schedule 01.06.2017
comment
@PetrPetrov Я знаю, что это список, я спрашивал его стоимость? :)   -  person errata    schedule 01.06.2017
comment
@errata: all_files создается в третьей строке кода.   -  person martineau    schedule 01.06.2017
comment
@martineau Я это вижу :)   -  person errata    schedule 01.06.2017
comment
@errata: Не похоже. В любом случае, похоже, уместнее было бы спросить, какое значение было у today_log, когда вызов get() возвратил None.   -  person martineau    schedule 01.06.2017
comment
@martineau Мой первоначальный вопрос заключался в том, каково значение all_files, а не какой тип переменной это или в какой строке она находится :) Поскольку today_log кажется None, мне было интересно, каково значение all_files, потому что today_log должно быть первым элемент _6 _... :)   -  person errata    schedule 01.06.2017
comment
@errata есть имена файлов, которые мне нужно получить из каталога. Я пытаюсь получить содержимое файла с его именем. Но не может быть None, потому что его размер 45Мб   -  person Petr Petrov    schedule 01.06.2017
comment
@PetrPetrov Вы видите желаемый результат (содержимое) этого файла при запуске sftp.open(all_files[0]) (сразу после первой строки all_files = ...)? Кстати, если я прав, sftp.listdir() вернет вам файлы в произвольном порядке, а это означает, что вы не можете каждый раз получать один и тот же файл в позиции 0 ...   -  person errata    schedule 01.06.2017
comment
@errata sftp.open() возвращает <paramiko.sftp_file.SFTPFile object at 0x105e82080>. Как я могу показать данные с него?   -  person Petr Petrov    schedule 01.06.2017
comment
@errata, можете вы сказать, я проверяю свой каталог с помощью кода, и теперь есть файлы с сервера. Что я должен использовать только для чтения, но не для сохранения на свой компьютер?   -  person Petr Petrov    schedule 01.06.2017


Ответы (1)


Если я правильно понял ваш вопрос, вы хотите прочитать файл с SFTP-сервера в переменную / память.

Для этого вам нужно использовать .getfo, например :

flo = BytesIO()
sftp.getfo(remotepath, flo)

В качестве альтернативы можно напрямую использовать библиотеку Paramiko (без оболочки pysftp).
См. Прочитать файл с сервера с помощью ssh с помощью python .

person Martin Prikryl    schedule 02.06.2017