Python-FTP
FTPまたはファイル転送プロトコルは、ネットワーク内のコンピュータ間でファイルを転送するために使用されるよく知られたネットワークプロトコルです。これはクライアントサーバーアーキテクチャで作成され、ユーザー認証と一緒に使用できます。認証なしで使用することもできますが、安全性は低くなります。現在の作業ディレクトリとその他のフラグを維持するFTP接続。各転送には、データの転送に使用される2次接続が必要です。最も一般的なWebブラウザーは、FTPサーバーでホストされているファイルを取得できます。
FTPクラスのメソッド
Pythonではモジュールを使用します ftplib これには、ファイルを転送するときにファイルを一覧表示するために必要な以下のメソッドがあります。
方法 | 説明 |
---|---|
pwd() | 現在の作業ディレクトリ。 |
cwd() | 現在の作業ディレクトリをパスに変更します。 |
dir([path [、... [、cb]]) | パスのディレクトリリストを表示します。retrlines()に渡されるオプションのコールバックcb。 |
storlines(cmd、f) | 指定されたFTPコマンド(STORファイル名など)を使用してテキストファイルをアップロードします。 |
storbinary(cmd、f [、bs = 8192]) | storlines()に似ていますが、バイナリファイルに使用されます。 |
delete(path) | パスにあるリモートファイルを削除します。 |
mkd(ディレクトリ) | リモートディレクトリを作成します。 |
例外ftplib.error_temp | 一時的なエラーを示すエラーコード(400〜499の範囲の応答コード)を受信すると、例外が発生します。 |
例外ftplib.error_perm | 永続的なエラーを示すエラーコード(500〜599の範囲の応答コード)を受信すると、例外が発生します。 |
connect(host [、port [、timeout]]) | 指定されたホストとポートに接続します。FTPプロトコルで指定されているように、デフォルトのポート番号は21です。 |
終了する() | 接続を閉じて終了します。 |
以下は、上記の方法のいくつかの例です。
ファイルの一覧表示
次の例では、ftpサーバーへの匿名ログインを使用して、現在のディレクトリの内容を一覧表示します。ファイルとディレクトリの名前を処理し、それらをリストとして保存します。次に、それらを印刷します。
import ftplib
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
data = []
ftp.dir(data.append)
ftp.quit()
for line in data:
print "-", line
上記のプログラムを実行すると、次の出力が得られます-
- lrwxrwxrwx 1 0 0 1 Nov 13 2012 ftp -> .
- lrwxrwxrwx 1 0 0 3 Nov 13 2012 mirror -> pub
- drwxr-xr-x 23 0 0 4096 Nov 27 2017 pub
- drwxr-sr-x 88 0 450 4096 May 04 19:30 site
- drwxr-xr-x 9 0 0 4096 Jan 23 2014 vol
ディレクトリの変更
以下のプログラムは、ftplibモジュールで使用可能なcwdメソッドを使用してディレクトリを変更し、必要なコンテンツをフェッチします。
import ftplib
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
data = []
ftp.cwd('/pub/') change directory to /pub/
ftp.dir(data.append)
ftp.quit()
for line in data:
print "-", line
上記のプログラムを実行すると、次の出力が得られます-
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 FreeBSD -> os/BSD/FreeBSD
- lrwxrwxrwx 1 504 450 20 Nov 02 2007 ImageMagick -> graphics/ImageMagick
- lrwxrwxrwx 1 504 450 13 Nov 02 2007 NetBSD -> os/BSD/NetBSD
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 OpenBSD -> os/BSD/OpenBSD
- -rw-rw-r-- 1 504 450 932 Jan 04 2015 README.nluug
- -rw-r--r-- 1 504 450 2023 May 03 2005 WhereToFindWhat.txt
- drwxr-sr-x 2 0 450 4096 Jan 26 2008 av
- drwxrwsr-x 2 0 450 4096 Aug 12 2004 comp
ファイルのフェッチ
上記のようにファイルのリストを取得した後、を使用して特定のファイルをフェッチできます getfile方法。このメソッドは、ファイルのコピーをリモートシステムからftp接続が開始されたローカルシステムに移動します。
import ftplib
import sys
def getFile(ftp, filename):
try:
ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write)
except:
print "Error"
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
ftp.cwd('/pub/') change directory to /pub/
getFile(ftp,'README.nluug')
ftp.quit()
上記のプログラムを実行すると、ファイルREADME.nlugが、接続が開始されたローカルシステムに存在していることがわかります。