home changes contents help options

226:FTPクライアントを作る

ftplib を使います。

http://pleac.sourceforge.net/pleac_python/internetservices.html

 import ftplib
 ftp = ftplib.FTP("ftp.host.com")
 ftp.login(username, password)
 ftp.cwd(directory)

 # get file
 outfile = open(filename, "wb")
 ftp.retrbinary("RETR %s" % filename, outfile.write)
 outfile.close()

 # upload file
 upfile = open(upfilename, "rb")
 ftp.storbinary("STOR %s" % upfilename, upfile)
 upfile.close()
 ftp.quit()

FTPのポートは標準で21となっています。8021で接続するには次のような方法を取ります。

 ftp = ftplib.FTP()
 ftp.connect(server,8021)

ローカルのディレクトリにあるテキストファイル(拡張子txt)をFTPサーバにコピーするプログラム。 この例ではファイルをバイナリモードで転送しています。このためローカルのファイルを開くときはバイナリモードで開いておく方がよいでしょう。 テキストファイルを送るときは問題ないのですが、バイナリファイルをテキストモードで開いてしまうと当然のことながら正しく動作しません。

 import glob
 import os
 from ftplib import FTP
 from urllib import urlopen

 path=os.getcwd()
 txtdir=os.path.join(path,'txt') 
 filelist=glob.glob(txtdir+'/*.txt')

 ftp=FTP('192.168.11.2')
 ftp.login('seko','password')
 ftp.cwd('/home/seko/data/txt/')
 dstlist= ftp.nlst()
 for file in  dstlist:
     ftp.delete(file)
     print file + ' is deleted'
 for file in filelist:
     f=open(file,'rb')
     filename=os.path.basename(file)
     cmd='STOR '+filename
     print cmd
     ftp.storbinary(cmd,f)
     f.close()
 ftp.quit()