いいわけブログ

ガジェット・スニーカー、時々テックな情報お伝えするブログ

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

      2016/02/23

最近お目にかからなくなってきた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は今後使うことあるのかどうか・・・。

 - Python, 技術 , ,