例えば、テキストデータをサーバー上で生成・加工し、別のサーバーにFTPする場合です。
text_data = "dummy_text"
ftp.storbinary("STOR /アップロード先/text_file.txt", text_data.encode('文字コード'))
としても
io.UnsupportedOperation: read
とエラーが出てしまいます。つまり、これはftplibが扱うのがファイルオブジェクトでなければならないから、と理解しています。
この場合、一旦、一度ダミーファイルとして保存して再度読み込むといったワンクッションが必要になってしまうのでしょうか。
text_data = "dummy_text"
with open("dummy_file.txt","wb") as f1:
f1.write(text_data.encode('文字コード'))
with open("dummy_file.txt","rb") as f2:
ftp.storbinary("STOR /アップロード先/text_file.txt", f2)
小さいファイルのであればこれもやむなしと思っていますが、例えばアップロードされた大きめのファイルをFTPする必要がある場合などは転送時間短縮のため、直接転送できると良いなと思っています。
ファイルオブジェクトがよく理解できていないようです。。。
ご教授いただけたら幸いです。。。
pythonは書いてないので外しているかもしれませんが
text_dataはioじゃないから readはUnsupportedOperationだよとエラーが出ているので
io.StringIO(text_data)とioにしてやればいいのではないでしょうか。
大きなデータの場合、転送時間も多くかかりその間メモリーを占有してしまいます。
一方ファイルを経由する場合はblocksize分だけが必要で転送時間については相手の状況
も関係してくるのでさほど違いは無いと考えられます。
小さいデータの場合はio.StringIOを使い、大きなデータの場合はいったんtmpファイルに落とすほうがいいように思います。
ありがとうございます。
io.StringIOのご指摘から、私がfile-like オブジェクトを理解していなかったことがよくわかりました。
大変助かりました!!