いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

Pythonメモ-22 (ftputilでサクッとftp処理)(ftputil, a high-level interface to the ​ftplib module)

概要

python には標準で ftplib というモジュールが備わっていて、それを利用してftp処理が作れます。

21.13. ftplib — FTPプロトコルクライアント — Python 3.6.1 ドキュメント

が、このftplibは、ものすごく低レイヤなAPIになってて、実際作れるのですが面倒くさいです。

さくっと書きたいので、なんか便利なライブラリないかなって探したら、やっぱりありました。

pypi.python.org

インストール

インストールは、pip で一発です。

$ pip install ftputil

残念ながら、condaの方にはなかったです。

使い方(とりあえず get と put)

ftputilのページは

ftputil

で、とても分かりやすいドキュメントもあります。(英語ですがコードもあるので普通に分かります。)

Documentation – ftputil

自分がやりたかったのは、シンプルなgetとputだったので、以下のように書けばさくっと行けました。

ftp-get

import ftputil

# ---------------------------------------------
# FTPサーバーにログインしてダウンロード
# ---------------------------------------------
with ftputil.FTPHost(FTP_HOST, FTP_USER, FTP_PASS) as ftp:
    ftp.chdir(FTP_BASE_DIR)
    for host_file in ftp.listdir(ftp.curdir):
        ftp.download(host_file, f'{local_dir}/{host_file}')

ftp-put

import ftputil

# ---------------------------------------------
# FTPサーバーにログインしてアップロード
# ---------------------------------------------
with ftputil.FTPHost(FTP_HOST, FTP_USER, FTP_PASS) as ftp:
    ftp.chdir(FTP_UPLOAD_DIR)
    for local_file in os.listdir(local_dir):
        ftp.upload(f'{local_dir}/{local_file}', f'{local_file}')

withが使えて、osモジュールに似たメソッドがあって、downloadとuploadでサクッと行けるのがいいですね。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。