ftplibを使用しPythonでFTP(ファイル転送プロトコル)転送を行う(SSL / TLSで接続する)

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(フォルダパス))で作成したテキストファイルが、ヘテムルレンタルサーバーにアップロードされていることが確認できました。

コメント

タイトルとURLをコピーしました