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()
Connection.get
は何も返しません。 localpath
引数で指定されたローカルパスにリモートファイルをダウンロードします。引数を指定しない場合、現在の作業ディレクトリにファイルがダウンロードされます。
あなたはこれが欲しい:
sftp.get('directory/file.csv', '/local/path/file.csv')
あなたが本当にファイルを変数に読みたいなら(あなたが実際に望んでいないと私が理解すること)、 Connection.getfo
のように:
flo = BytesIO()
sftp.getfo(remotepath, flo)
または、(pysftpラッパーなしで)Paramikoライブラリを直接使用します。
「 Pythonを使用してSSHでサーバーからファイルを読み取る 」を参照してください。