【Python】FTPでサーバーにファイルをアップロード

この記事では、Python言語とFTPでサーバーにファイルをアップロードするプログラムについてソースコード付きで解説します。

FTPでサーバーにファイルをアップロード

Pythonには、FTPを使うための標準ライブラリ「ftplib」があります。
今回は、このライブラリで任意のファイルをサーバーにアップロードしてみました。

ソースコード

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import ftplib

def ftp_upload(hostname, username, password, upload_src_path, upload_dst_path):
    # FTP接続・アップロード
    ftp = ftplib.FTP(host_name)
    ftp.set_pasv("true")
    ftp.login(username, password)
    fp = open(upload_src_path, 'rb')
    ftp.storbinary(upload_dst_path ,fp)

    # 終了処理
    ftp.close()
    fp.close()


hostname = "xxx.xxx.xxx" # 接続先サーバーのホスト名
upload_src_path = "test.csv" # アップロードするファイルパス
upload_dst_path = "STOR /sample/test.csv" # アップロード先のファイルパス
username = "user" # サーバーのユーザー名
password = "password" # サーバーのログインパスワード

ftp_upload(hostname, username, password, upload_src_path, upload_dst_path)

実行結果

サンプルプログラムの実行結果です。

FTPソフトで確認すると、指定したディレクトリにtest.csvが保存されていました。
尚、指定したディレクトリが存在しない場合はエラーとなります。

【関連記事】
Python入門

コメント

  1. おでこ より:

    いつも拝見させていただいてます.勉強になっています.
    現在ラズベリーパイで色抽出してフレーム間差分(OpenCV3,Python3)を用いて植物の監視用システムを作成しています.そこで,撮った写真をMacに送信したいです.この記事のプログラムを参考にして,ラズパイからpcへ写真を送りたいのですが,pc側でftpサーバをたてないといけません,その方法やおすすめのソフトがあれば教えてください.PCはMacBook Air(Sierra 10.13.1)です.

    • 管理人 より:

      ※おでこ様

      コメントありがとうございます。

      ■PCにサーバーを立てる方法について
      XAMPPというソフトを使うのがオススメです。
      サーバー構築に必要な「Apache、PHP、MySQL」等を
      一括で簡単にインストール・管理できて便利です。

      ■補足
      ちなみに管理人の場合は、自分のPCにFTPサーバーを立てるのではなく
      xdomainという無料のレンタルサーバーを借りて練習していました。

  2. おでこ より:

    管理人様
    お返事有難うございました.早速XAMPPというソフトを入れましたが,ftpサーバの立て方がわかりません,参考になるHP,記事,またはやり方を教えていただけないでしょうか.

    • おでこ より:

      windows10でもいいです.よろしくお願いします.

    • 管理人 より:

      ※おでこ様
      コメントありがとうございます。
      以下の記事を参考にされてはどうでしょうか。

       XAMPPでFTP(FileZilla)を使うための設定方法【初心者向け】
       https://techacademy.jp/magazine/4078
       
       XAMPPのFTPサーバー「FileZilla」の設定手順
       http://wplogs.com/xampp-filezilla/

  3. kiyo4810 より:

    はじめまして管理人様
    今回のこの記事を参考にPythonからFTPログインできないものか試したのですがエラーがずっと出てしまいます。
    いつもはCoreserverのレンタルサーバー領域にFileZillaから普通にFTPアップロードできているものをPythonからアップロードしたいと考えたのですが
    error_perm: 500 /PUBLIC HTML/ not understood
    のエラーが出たりしてアップロード先のディレクトリを変えてみたりすると今度は
    error_perm: 550 /public_html/nakanopropertymalaysia.com/: Operation not permitted
    に変わったりしますがいずれもアップロードできません。Filezillaなら普通にアップロードできるのです。

    この件に関し、TeratailとStack Overflowに質問をかげかけていますが解決に至っておりません。
    つきましては管理人様はこのような件の解決に際し、Mentaなどは利用されていませんでしょうか?出来たらすぐに解決し、前に進みたく思っております。

    お助けいただけますと嬉しいです。
    何卒よろしくお願い致します。

    • 管理人 より:

      返信が遅れてしまい申し訳ございません。
      Menta等は利用しておりません。ざっと見る感じパーミッション、ファイル権限のエラーですので
      まずはエラーログを見てみたほうがいいかと思います。

  4. xexex_y より:

    すみません。
    上記のプログラムを参考にラズパイ4からFTPでCSVファイルを送ろうと実施してみたのですが
    最後のftp_upload(hostname, username, password, upload_src_path, upload_dst_path)
    の部分でftplib.error_perm 500 command not と表示されてしまい実行できません。
    もし原因がわかれば教えて頂きたいです。