Pythonでファイル転送プロトコル(FTP: File Transfer Protocol)クライアントを作成する方法をご紹介します。
PythonからFTPを利用するには、ftplibパッケージを使用する。
from ftplib import FTP
FTPオブジェクトをインスタンス化する。
ftp = FTP()
FTPオブジェクトのインスタンス化と同時にFTPサーバへ接続することもできる。
ftp = FTP("host")
FTPオブジェクトのインスタンス化と同時にFTPサーバへの接続とログインもできる。
ftp = FTP("host", "username", "password")
FTPサーバへ接続するにはconnect()
メソッドを使う。
ftp.connect("host")
FTPオブジェクトのインスタンス化と同時にFTPサーバへ接続することもできる。
ftp = FTP("host")
ログインするにはlogin()
メソッドを使う。
ftp.login("username", "password")
FTPオブジェクトのインスタンス化と同時にFTPサーバへの接続とログインもできる。
ftp = FTP("host", "username", "password")
FTPサーバと切断するにはquit()
メソッドまたはclose()
メソッドを使う。
FTPサーバにQUITコマンドを送信して接続を閉じる。
ftp.quit()
接続を一方的に閉じる。
ftp.close()
リモートディレクトリ(FTPサーバ側のディレクトリ)のパス名を取得するには、pwd()
メソッドを使う。
path = ftp.pwd()
リモートディレクトリ(FTPサーバ側のディレクトリ)を変更するには、cwd()
メソッドを使う。
ftp.cwd("/remote/directory")
リモート(FTPサーバ側)のテキストファイルをローカル(FTPクライアント側)にダウンロードするには、retrlines()
を使う。
with open("local.txt", "w") as f:
ftp.retrlines("RETR /remote.txt", f.write)
リモート(FTPサーバ側)のバイナリファイルをローカル(FTPクライアント側)にダウンロードするには、retrbinary()
を使う。
with open("local.zip", "wb") as f:
ftp.retrbinary("RETR /remote.zip", f.write)
FTPサーバからテキストファイルをダウンロードする例を示す。
from ftplib import FTP
ftp = FTP("host")
ftp.login("username", "password")
with open("local.txt", "w") as f:
ftp.retrlines("RETR /remote.txt", f.write)
ftp.close()
ローカル(FTPクライアント側)のテキストファイルをリモート(FTPサーバ側)にアップロードするには、storlines()
を使う。ローカルのファイルをオープンする際、テキストファイルであってもバイナリモード(rb)で開く必要がある。
with open("local.txt", "rb") as f:
ftp.storlines("STOR /remote.txt", f)
ローカル(FTPクライアント側)のバイナリファイルをリモート(FTPサーバ側)にアップロードするには、storbinary()
を使う。
with open("local.zip", "rb") as f:
ftp.storbinary("STOR /remote.zip", f)
FTPサーバへテキストファイルをアップロードする例を示す。
from ftplib import FTP
ftp = FTP("host")
ftp.login("username", "password")
with open("local.txt", "rb") as f:
ftp.storlines("STOR /remote.txt", f)
ftp.close()
リモート(FTPサーバ側)ファイルの一覧を取得するには、nlst()
メソッドを使う。
files = ftp.nlst("/dir")
ファイルの一覧を取得するサンプルを示す。
ftp = FTP("host")
ftp.login("username", "password")
files = ftp.nlst("/dir")
print(files)
ftp.close()
リモートディレクトリのXMLファイルをすべてダウンロードするサンプルを示す。
ftp = FTP("host")
ftp.login("username", "password")
files = ftp.nlst("*.xml")
for file in files:
with open(file, "w") as f:
ftp.retrlines("RETR " + file, f.write)
ftp.close()
リモートファイルを削除するには、delete()
メソッドを使う。
ftp.delete("remote.txt")
リモートディレクトリ(FTPサーバ側のディレクトリ)を作成するには、mkd()
メソッドを使う。
ftp.mkd("subdir")
リモートディレクトリ(FTPサーバ側のディレクトリ)を削除するには、rmd()
メソッドを使う。
ftp.rmd("subdir")
FTPサーバ上で任意のコマンドを実行にするにはsendcmd()
メソッドを使う。
ftp.sendcmd("SITE CHMOD 644 /remote.txt")