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