pythonでFTPを使うには、ftplibをimportすればよい。標準で入っているのでpipなどはする必要がない。
下記の関数では、対象ファイルをバイナリ転送モードにアップロード、ダウンロードとも合わせることで、あげたファイルをそのまま落とすことができるようにしている。'rb'とかstorlines、retrbinaryあたりを合わせるのがポイント。
サンプルとして関数を作ってみた。ローカルにあるテキストファイル"tmp.csv"をアップロードして、サーバーに"test.csv"という名前のファイルで保存される。
(アップロード)
file_name = "test.csv" # サーバーアップロード先でのファイル名
local_file_name = "tmp.csv" # アップロー元のローカルのファイル名
ftp_upload(hostname, username, password, source_path,file_name, server_path,local_file_name)
これをサイドダウンロードすると元どおりになる。
(ダウンロード)
ftp_download(hostname, username, password, source_path,file_name, server_path,local_file_name)
import ftplib
#---------
hostname = "xxxx" # 接続先サーバーのホスト名
source_path = "xxxx" # アップロード元のパス
server_path = "./xxxx/" # アップロード先のパス
username = "xxxx" # サーバーのユーザー名
password = "xxxx" # サーバーのログインパスワード
#---------
def ftp_upload(hostname, username, password, source_path,file_name, server_path,local_file_name):
with ftplib.FTP() as ftp:
try:
ftp.connect(hostname) # 接続
ftp.login(username, password) # ログイン
ftp.cwd(server_path) # 指定パスに移動
with open(source_path + local_file_name, 'rb') as fp:
ftp.storlines('STOR ' + file_name, fp)
except ftplib.all_errors as e:
print('FTP error = %s' % e)
#else:
#print('FTP success.')
#ダウンロード
def ftp_download(hostname, username, password, source_path,file_name, server_path,local_file_name):
with ftplib.FTP() as ftp:
try:
ftp.connect(hostname) # 接続
ftp.login(username, password) # ログイン
ftp.cwd(server_path) # 指定パスに移動
with open(source_path + local_file_name, 'wb') as fp:
ftp.retrbinary('RETR ' + file_name, fp.write)
except ftplib.all_errors as e:
print('FTP error = %s' % e)
#else:
#print('FTP success.')
(関連コンテンツ)