python ftplibによるファイルのダウンロード・アップロードを行ってみた
はじめに
どうも、こじまるです。
『pythonでFTPサーバのファイルをダウンロード、アップロードする方法』をお探しではないでしょうか?そんな方に向けて、pythonの標準ライブラリftplibを使ったファイルダウンロード・アップロードの方法を記事にまとめました。
- ftplibを使ったファイルダウンロード・アップロードの方法
本記事で紹介する方法を実践すれば、pythonを使ってFTPサーバのファイルをダウンロード・アップロードすることができます。
ftplibを使ったファイルダウンロード・アップロード
ファイルのダウンロード
FTPサーバ上のファイル(test.txt)をsample.txtという名前でローカルにダウンロードすることを例に説明します。
FTPサーバへのログイン
まず、FTPサーバにアクセスするためにFTPクラスのインスタンスを作成します。FTPクラスはwith構文がサポートされているため、下記のように記述できます。
host = '127.0.0.1' with FTP(host) as ftp: ftp.login() # login as anonymous user
FTPサーバで匿名ユーザ(anonymous user)を許可している場合、FTP.loginメソッドは引数なしで実行できます。特定のユーザでログインしたい場合には、FTP.loginメソッドの引数にユーザ名、パスワードを追加してください。
カレントディレクトリの変更
FTPサーバ上のダウンロード対象のファイルパスに応じて、カレントディレクトリを変更する必要があります。
FTP.cwd(pathname)
FTP.cwdメソッドのpathnameにカレントディレクトリを指定することで変更できます。今回はFTPサーバでログインしたパス(物理パス)の直下にtest.txtが配置されているため、変更は不要です。
リモートからローカルへのファイルダウンロード
ローカルのsample.txtというファイルを'wb'モードでファイルオープンし、FTP.retrbinaryメソッドによりバイナリ転送モードでファイルを受信します。
cmd = 'RETR test.txt' with open('sample.txt','wb') as local_file: ftp.retrbinary(cmd, local_file.write)
FTP.retrbinaryメソッドの第一引数cmdには適切な'RETR filename'という形式で指定する必要があります。FTPのcommandについてはこちらをご確認ください。
ソースコード
全体のソースコードは下記の通りです。
from ftplib import FTP, error_perm, all_errors def copyFile(src, dest): host = '127.0.0.1' cmd = 'RETR test.txt' try: with FTP(host) as ftp: ftp.login() # login as anonymous user lists = ftp.nlst() print(lists) if src in lists: print('file is existed') with open(dest,'wb') as local_file: ftp.retrbinary(cmd, local_file.write) print('copy is done') else: print('file is not existed') except error_perm: print('Pemission denined') except all_errors: print('Internal server error') if __name__ == '__main__': src = 'test.txt' dest = 'sample.txt' copyFile(src, dest)
ファイルのアップロード
ローカルのファイル(sample.txt)をFTPサーバ上にhoge.txtという名前でアップロードすることを例に説明します。
ローカルからリモートへのファイルアップロード
ローカルのsample.txtというファイルを'rb'モードでオープンし、FTP.storbinaryメソッドによりバイナリ転送モードでファイルを転送します。
cmd = 'STOR hoge.txt' with open('sample.txt','rb') as local_file: ftp.storbinary(cmd, local_file)
FTP.storbinaryメソッドの第一引数cmdには'STOR filename'という形式で指定します。FTP.storbinaryメソッドの第二引数はファイルオブジェクトになりますので、ファイルオープンで開いたファイルオブジェクト local_fileを指定します。
ソースコード
全体のソースコードは下記の通りです。
from ftplib import FTP, error_perm, all_errors import os def uploadFile(src, dest): host = '127.0.0.1' cmd = 'STOR ' + dest try: with FTP(host) as ftp: ftp.login() # login as anonymous user lists = os.listdir('.') if src in lists: print('file is existed') with open(src,'rb') as local_file: ftp.storbinary(cmd, local_file) print('upload is done') else: print('file is not existed') except error_perm: print('Pemission denined') except all_errors: print('Internal server error') if __name__ == '__main__': src = 'sample.txt' dest = 'hoge.txt' uploadFile(src, dest)