ファイル転送、PythonとFTP

2353 ワード

ファイル転送プロトコル(FTP)は主に匿名で公開ファイルをダウンロードするために用いられ、2台のコンピュータ間の転送ファイルにも用いられ、特にwindowsを用いて動作し、ファイルストレージシステムがUNIXを用いる場合に用いられる.Webが流行する前に、FTPはネット上でファイルの伝送とソフトウェアとソースコードのダウンロードを行う主な手段の一つだった.FTPは、リモートFTPサーバにアクセスするにはユーザー名とパスワードを入力する必要がありますが、匿名アクセスも許可されます.ただし、管理者は、匿名ユーザーのログインを許可するためにFTPサーバを設定する必要があります.この場合、匿名ユーザーのユーザー名は「anonymous」で、パスワードは一般的にユーザーの電子メールアドレスです.
FTPの全体の仕事の流れは以下の通りである:1.クライアントはリモートホスト上のFTPサーバ2に接続する.クライアントはアカウントのパスワード(または「anonymous」と電子メールアドレス)3を入力します.クライアントは各種のファイル転送と情報照会操作を行う.クライアントはリモートFTPサーバーから退出し、転送を終了する
もちろん、これは一般的な伝送にすぎず、ネットワークの原因や両側のコンピュータがクラッシュして伝送が完了する前に中断することがある.クライアントが15分以上(900秒)応答しない場合、FTP接続はタイムアウトして中断します.
PythonのFTPサポートを使用する場合、必要なのはftplibモジュールをインポートし、ftplibをインスタンス化することだけです.FTPクラスオブジェクト.すべてのFTP操作(ログイン、ファイル転送、ログアウトなど)はこのオブジェクトを使用して操作します.
次はPythonの偽コードです
        from ftplib import FTP
        f = FTP('some.ftp.server')
        f.login('anonymous','[email protected]')
        .
        .
        .
        f.quit()

クライアントFTPプログラム例
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ftplib
import os
import socket

HOST = 'FTP   '
DIRN = '    '
FILE = '     '

def main():
    try:
        f = ftplib.FTP(HOST)           #     FTP   ,      FTP    
    except (socket.error,socket.gaierror) as e:
        print('error:cannot reach "%s"' % HOST)
        return
    print('...connected to host "%s"' % HOST)

    try:
        f.login()                     #   “anonymous”  
    except ftplib.error_perm as e:
        print('error:cannot login anonymously')
        f.quit()
        return
    print('...logged in as "anonymously"')

    try:
        f.cwd(DIRN)                   #        
    except ftplib.error_perm as e:
        print('error:cannot CD to "%s"' % DIRN)
        f.quit()
        return
    print('...changed to "%s" forder' % DRIN)

    try:
        f.retrbinary('RETR %s' % FILE,open(FILE,'wb').write) #      ,        FILE  
    except ftplib.error_perm as e:
        print('error:cannot read file "%s"' % FILE)
        os.unlink(FILE)
    else:
        print('...downloaded "%s" to CWD' % FILE)
        f.quit()

if __name__ == '__main__':
    main()