web-dev-qa-db-ja.com

pysftpでファイルをダウンロードする

FTPサーバー(SFTPプロトコル)に保存されている.csvファイルをロード(およびローカルに直接保存)しようとしています。 Pythonをpysftpライブラリと組み合わせて使用​​しています。ファイルが存在するかどうかを確認すると、TRUEが返されます。

ローカル環境にファイルを取得(および保存)するにはどうすればよいですか?明らかな何かを見逃していますか?

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

# Make connection to sFTP
with pysftp.Connection(hostname,
                       username=sftp_username,
                       password=sftp_pw,
                       cnopts = cnopts
                       ) as sftp:
    sftp.isfile('directory/file.csv')) ## TRUE
    file = sftp.get('directory/file.csv')
    print(file) ## None

sftp.close()
8
Dendrobates

Connection.get は何も返しません。 localpath引数で指定されたローカルパスにリモートファイルをダウンロードします。引数を指定しない場合、現在の作業ディレクトリにファイルがダウンロードされます。

あなたはこれが欲しい:

sftp.get('directory/file.csv', '/local/path/file.csv')

あなたが本当にファイルを変数に読みたいなら(あなたが実際に望んでいないと私が理解すること)、 Connection.getfo のように:

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

または、(pysftpラッパーなしで)Paramikoライブラリを直接使用します。
Pythonを使用してSSHでサーバーからファイルを読み取る 」を参照してください。

14
Martin Prikryl