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

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

目次

  1. パッケージ
  2. FTPオブジェクト
  3. FTPサーバへの接続
  4. ログイン
  5. FTPサーバとの切断
  6. リモートディレクトリのパス取得
  7. リモートディレクトリの変更
  8. ファイルのダウンロード(GET)
  9. ファイルのアップロード(PUT)
  10. ファイル一覧の取得
  11. リモートファイルの削除
  12. ディレクトリの作成
  13. ディレクトリの削除
  14. FTPサーバ上で任意のコマンドを実行

パッケージ

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")