ftplibを使用しPythonでFTP(ファイル転送プロトコル)転送を行ってみます。
なお、ftplibはPythonの標準ライブラリです。事前にインストールする必要はありません。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■ftplibを使用しFTP(ファイル転送プロトコル)転送を行う
では、早速ftplibを使用しFTP(ファイル転送プロトコル)転送を行うスクリプトを書いていきます。
■ファイルをダウンロードする
■コード(SSL / TLSで接続する場合)
from ftplib import FTP_TLS, all_errors ENCODING = 'utf8' with FTP_TLS('ホスト名(アドレス)', 'ユーザー名', 'パスワード') as ftp: ftp.cwd('/web/') ftp.encoding = ENCODING with open('welcome.html','w') as local_file: response = ftp.retrlines('RETR welcome.html',local_file.write) if response.startswith('226'): print('転送完了しました') else: print('転送中にエラーが発生しました。ローカルファイルが不完全または破損している可能性があります。')
TLSをサポートした FTP (FTPS)を行うためのクラスをftpに代入する。
代入後、FTPS接続を行い、cwd()で「web」というディレクトリを取得する。
FTPS接続は、ftp.encodingでutf8に設定する。utf-8で設定しないと「UnicodeEncodeError: ‘cp932’ codec can’t encode character ‘\xe3’ in position 44: illegal multibyte sequence」というエラーが発生する。
ディレクトリ内の「welcome.html」というHTML形式のファイルを”w”(書き込み)モードに設定し、local_fileに代入する。
代入後、ftp.retrlines()で「welcome.html」というHTML形式のファイルをダウンロードし、local_fileに書き込みを行う。
if文を使った条件分岐で、転送が完了した場合はprint関数で「転送完了」と出力。そうでない場合は、「エラーが発生」と出力する。
■実行
今回のスクリプトを「file_transfer_ssl_tls.py」という名前で保存し、コマンドプロンプトから実行してみます。
実行してみると、print関数で「転送完了しました」と出力されることを確認できました。
今回は現在契約しているヘテムルレンタルサーバーにFTPS接続を行い「web」というディレクトリにある「welcome.html」というHTML形式のファイルをダウンロードを試みたが、見事にカレントディレクトリ(作業ディレクトリ)内にファイルがダウンロードされていることを確認できました。
■ファイルをアップロードする
ファイルのダウンロードを行いましたので、次にファイルをアップロードしてみます。
■コード(SSL / TLSで接続する場合)
from ftplib import FTP_TLS ENCODING = 'utf8' with FTP_TLS('ホスト名(アドレス)', 'ユーザー名', 'パスワード') as ftp: ftp.cwd('/web/') ftp.encoding = ENCODING with open(r'C:\Users\user\test\test.txt','rb') as text_file: ftp.storlines('STOR test.txt', text_file)
ファイルをアップロードする場合は、TLSをサポートした FTP (FTPS)を行うためのクラスをftpに代入し、with構文を使い、指定したファイルをバイナリファイルを読み込む(rbモード)で開きます。
開いた後に、今回は「test.txt」というテキストファイルをアップロードするために、テキストファイル用のstorlines()を記述します。第1の引数にはファイル名等を記述し、第2の引数にはバイナリファイルを読み込む(rbモード)で開いたテキストファイルを指定し、FTPS接続を行いサーバーの指定したディレクトリ内にファイルを保存(アップロード)します。
■実行
このスクリプトを「file_download_ssl_tls.py」という名前で保存し、コマンドプロンプトから実行してみます。
実行してみると、ローカル上(C:\Users\user\test(フォルダパス))で作成したテキストファイルが、ヘテムルレンタルサーバーにアップロードされていることが確認できました。
コメント