FTP server默認的埠號為21,20埠用于資料傳輸,
本文參考地址:https://docs.python.org/3.6/library/ftplib.html
1. ftplib里包含FTP和FTP_TLS兩個class,后者是封裝了TLS安全傳輸協議的FTP,本文不多描述,查看官網即可,很簡單,
2. ftplib.FTP class就是一個模擬FTP協議客戶端的class,可以使用此class與FTP server進行各種互動,如資料上傳和下載等,
3. FTP的資料傳輸有兩種模式ASCII和binary格式,一般來說使用binary格式更加的普遍,適用場景較多,也因此FTP class最常用的四個method其實是:
FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)FTP.storlines(cmd, fp, callback=None)FTP.retrbinary(cmd, callback, blocksize=8192, rest=None)FTP.retrlines(cmd, callback=None)
其中storbinary與retrbinary就是進行二進制資料傳輸的method,
FTP資料下載:
一般來說,生產上會將ftp用戶的訪問權限限定在自己的家目錄下(可通過修改/etc/vsftpd.conf來改變此行為模式),
# The FTP class supports the with statement, e.g.:
from ftplib import FTP
with FTP('<ftp server IP>','user','passwd') as c,\
open('<local filename/fullpath_filename>','wb') as f:
c.retrbinary('RETR <remote ftpserver filename>',f.write)
# 直接使用host,user,passwd引數初始化FTP,相當于執行了FTP.connect().login(),簡便起見一般不這么麻煩的寫
# f.closed為True可知檔案已自動關閉
FTP class支持python context的with語法,此語法在python中是普遍推薦的,可以幫你自動處理相關物件的背景關系,也就是說可以幫你自動關閉相關的物件,防止自己忘了quit or close,
retr開頭的兩個method主要引數是cmd和callback,前者是獲取檔案的命令,格式為“RETR filename”,后者即callback為回呼函式,一般為openfile.write,表示將相關資料流寫入一個打開的檔案,檔案打開的方式取決于使用的retr method,例如retrbinary()可以使用'wb'打開的檔案,
FTP資料上傳:
相應的資料上傳的函式就是以stor開頭的兩個函式:storbinary與storlines,依然推薦使用前者,二進制總是比較受信任的,
from ftplib import FTP
with FTP('<ftp server IP>','user','passwd') as c,\
open('<remote ftpserver filename>','wb') as f:
c.storbinary('STOR <local filename/fullpath_filename>',f)
同樣的,上傳檔案的CMD格式為“STOR 檔案名”,
需要注意的是retr函式使用的是callback函式來將要下載的檔案寫入到本地open的檔案中,而stor函式則在server端打開一個檔案,然后將要上傳的資料寫入,
其他:
關于FTP server常見的returncode,參考:https://kb.globalscape.com/Knowledgebase/10142/FTP-Status-and-Error-Codes
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/158673.html
標籤:Python
上一篇:python序列(十)字典
