👻

Python ftplib FTP操作

2022/05/29に公開

Python ftplibのFTP操作

公式
https://docs.python.org/ja/3/library/ftplib.html

接続する

import ftplib

ftp = ftplib.FTP()
ftp.connect('xxx.xxx.xxx.xxx', port=21, timeout=60)
msg = ftp.login('user', 'password')

ftp.login(user, password)は、メッセージを返す。成功すると、

230 User ユーザー名 logged in

FTP Response Codeの一覧はこちら
https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes

Passive/Activeの設定はこうする。DefaultがPassiveなのでTrueなら省略。

ftp.set_pasv(True)

DirectoryとFileを確認

# カレントディレクトリを取得
ftp_current_dir = ftp.pwd()

# カレントディレクトリを移動
ftp.cwd('/foo/bar')

# カレントディレクトリのファイルとディレクトリの一覧をリストで取得
file_list = ftp.nlst(".")

ファイルかディレクトリか、等の詳細がほしい場合はmlsd

mlsd = ftp.mlsd(".")  # generatorが返ってくる
for i in mlsd:
    print(str(i))
('.', {'modify': '2022xxxxxxxxxx', 'perm': 'flcdmpe', 'type': 'cdir', 'unique': 'xxx', 'unix.group': '1000', 'unix.groupname': 'users', 'unix.mode': '0705', 'unix.owner': '1232', 'unix.ownername': 'xxx'})     
('..', {'modify': '2022xxxxxxxxxx', 'perm': 'flcdmpe', 'type': 'pdir', 'unique': 'xxx', 'unix.group': '1000', 'unix.groupname': 'users', 'unix.mode': '0700', 'unix.owner': '1232', 'unix.ownername': 'xxx'})    
('file.jpg', {'modify': '2022xxxxxxxxxx', 'perm': 'adfrw', 'size': '2275', 'type': 'file', 'unique': 'xxx', 'unix.group': '1000', 'unix.groupname': 'users', 'unix.mode': '0604', 'unix.owner': '1232', 'unix.ownername': 'xxx'})
('dir', {'modify': '2022xxxxxxxxxx', 'perm': 'flcdmpe', 'type': 'dir', 'unique': 'xxx', 'unix.group': '1000', 'unix.groupname': 'users', 'unix.mode': '0705', 'unix.owner': '1232', 'unix.ownername': 'xxx'})

ファイルをアップロード、ダウンロード、削除

# upload
with open('C:/upload/suru/file.jpg', "rb") as f:
    ftp.storbinary("STOR ./upload/sakino/dir/to/file_name.txt', f)

# download
with open('C:/download/surudir/file.jpg', 'wb') as f:
    ftp.retrbinary('RETR file.jpg', f.write)

# ファイルに保存せずに、一行ずつリストに入れる
textdata = list()
ftp.retrlines('RETR file.txt', textdata.append)

    # delete
ftp.delete(file.jpg)
GitHubで編集を提案

Discussion