2017-04-21 15 views
0

stfpがどのように動作するかについての質問です。私は、SFTPに接続してファイルをダウンロードするとき、正確に何が「舞台裏で」起こっているのかを理解することが好奇妙です。Python sftpファイルを取得したときや読み込もうとしたらどうなりますか?

私はsftpサーバーに接続するいくつかの継承コードを使用していて、ディレクトリをリストしています。そこから

sftp = pysftp.Connection(host='xxxxx', username='xxxx', password='xxxxx', cnopts=cnopts) 
sftp.cwd('/some_dir') 

server_files = sftp.listdir() 

、のは、私がpandasデータフレームにserver_files[1]を読みたいとしましょう:

私は単にその代わりすなわち

pd.read_csv(server_files[1]) 
# FileNotFoundError: [Errno 2] No such file or directory: 

、私は希望のファイルを読み込もうとすることはできません。私は最初にgetファイルを以下のようにする必要があります。

sftp.get(server_files[1]) 
pd.read_csv(server_files[1]) 
# Success! 

それは素晴らしいです。そこに問題はありません。しかし、私の質問は次のとおりです:

ここで、作業中のメモリのserver_files[1]オブジェクトが "保存されていますか?私はget操作の前後にtype(server_file[1])を実行しており、両方の結果がstrであり、オブジェクト自体は変更されていないことを示しています。だから私は実際にそのファイルのデータがどこに保持されているのか分かりません。なぜ私はmy file = sftp.get(server_file[1])のような何かをする必要はありませんか?ファイルの '名前'だけではどのように動作しますか?

これはコードを動作させる方法の問題ではなく、動作方法ですが、これを理解する上で助けていただければ幸いです。

乾杯

ジョン

答えて

1

は誤解のように見えます。

pysftp.get(server_files[1])ダウンロードリモートファイルserver_files[1]現在の作業ディレクトリ内のローカルファイルserver_files[1]には、あなたがlocalpath(第2)オプションの引数を指定しないと。 - コピーするローカルパスとファイル名、宛先

localPathに(STR)pysftp.get documentation(強調鉱山)を引用

。指定しない場合は、ファイルはローカルの現在の作業ディレクトリにコピーされ


のでpd.read_csv(server_files[1])ローカルコピーを読み込みます。それはではありません。は魔法のようにリモートファイルを読み取ります。

server_files[1]は、実際にはファイル名を含む単純な文字列です。何もない。

+0

これは意味をなさないと思います。ローカルの現在の作業ディレクトリを除いて、これはどこにありますか?私のPython環境では何も変わっていないので、私は見ることができます(つまり、新しい変数はなく、メモリは変更されません)。 –

+0

"現在の作業ディレクトリ"は、デフォルトでスクリプトを実行したディレクトリです。 'print os.getcwd()'を実行してみてください。 –

関連する問題