PythonでFTPクライアントを作成する

Pythonでファイル転送プロトコル(FTP: File Transfer Protocol)クライアントを作成する方法をご紹介します。

Table of Contents

パッケージ

PythonからFTPを利用するには、ftplibパッケージを使用する。

from ftplib import FTP

FTPオブジェクト

FTPオブジェクトをインスタンス化する。

ftp = FTP()

FTPオブジェクトのインスタンス化と同時にFTPサーバへ接続することもできる。

ftp = FTP("host")

FTPオブジェクトのインスタンス化と同時にFTPサーバへの接続とログインもできる。

ftp = FTP("host", "username", "password")

FTPサーバへの接続

FTPサーバへ接続するにはconnect()メソッドを使う。

ftp.connect("host")

FTPオブジェクトのインスタンス化と同時にFTPサーバへ接続することもできる。

ftp = FTP("host")

ログイン

ログインするにはlogin()メソッドを使う。

ftp.login("username", "password")

FTPオブジェクトのインスタンス化と同時にFTPサーバへの接続とログインもできる。

ftp = FTP("host", "username", "password")

FTPサーバとの切断

FTPサーバと切断するにはquit()メソッドまたはclose()メソッドを使う。

FTPサーバにQUITコマンドを送信して接続を閉じる。

ftp.quit()

接続を一方的に閉じる。

ftp.close()

リモートディレクトリのパス取得

リモートディレクトリ(FTPサーバ側のディレクトリ)のパス名を取得するには、pwd()メソッドを使う。

path = ftp.pwd()

リモートディレクトリの変更

リモートディレクトリ(FTPサーバ側のディレクトリ)を変更するには、cwd()メソッドを使う。

ftp.cwd("/remote/directory")

ファイルのダウンロード(GET)

リモート(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()

ファイルのアップロード(PUT)

ローカル(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サーバ上で任意のコマンドを実行

FTPサーバ上で任意のコマンドを実行にするにはsendcmd()メソッドを使う。

ftp.sendcmd("SITE CHMOD 644 /remote.txt")