Python ftplibでファイルをFTP GETする

最近お目にかからなくなってきたFTPサーバから、データをGETするスクリプトを組んでたのでメモ。
ftplibを使って、指定ディレクトリからデータをGETする簡単なサンプルコードです。
gzファイル取りたかったのでバイナリモードにしてますが、ASCIIモードの場合はretrlines()で。
下記サンプルコードではファイル名固定ですが、「あるディレクトリ配下のすべてのファイルをGET」とかする場合は、nlst()が便利だと思う。

ftp_srv.cwd(archive_path)
for getfile in ftp_srv.nlst():
    ...
    ...

NLSTの結果をリストオブジェクトで返してくれるので操作しやすい。

# coding=utf-8
import os
import ftplib
from ftplib import FTP
if __name__ == '__main__':
    archive_path = 'archive/20130619'
    filename = 'service.log.gz'
    try:
        ftp_srv = FTP('FTPサーバ', 'ユーザー名', 'パスワード') #FTPサーバへ接続
        ftp_srv.cwd(archive_path) # カレントディレクトリの指定(archive_pathがカレントになる)
        file_path = '/'.join([archive_path, filename])
        if not os.path.isfile(file_path):
            # バイナリモードでファイルを開く
            with open(file_path, 'wb') as f:
                ftp_srv.retrbinary('RETR '+filename, f.write) # バイナリモードでファイルを受信
        ftp_srv.quit()
    except ftplib.all_errors, e:
        print '%s' % e

pythonからだと意外とFTPは扱いづらいというか、プリミティブな感じがしました。
SCPとかSFTPならparamikoやFabric使えば良いっぽいし、ftplibは今後使うことあるのかどうか・・・。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です