總覽
本文將展示在Python中如何在ftplib模塊的幫助下使用FTP。
Ftplib
Python中的ftplib模塊允許您編寫執行各種自動FTP作業的Python程序。您可以輕鬆地連接到FTP服務器以檢索文件並在本地處理它們。要在Python中使用ftplib模塊,首先必須將其導入腳本。
打開連接
要”open”與FTP服務器的連接,您必須創建對象。建立連接(打開)後,就可以使用ftplib模塊中的方法了。有兩種方法可以使用:一種用於處理文本文件,另一種用於二進製文件。您可以輕鬆查看目錄結構,管理和下載文件。
如何使用?
該程序將首先連接到FTP服務器(ftp.cwi.nl),然後使用 LIST()方法列出FTP服務器根目錄中的文件和目錄。
from ftplib import FTP
ftp = FTP('ftp.cwi.nl') # 連接到服務器, 使用默認端口:21
ftp.login() # user: anonymous, passwd anonymous@
ftp.retrlines('LIST') # list directory contents
我們的第二個程序以電子郵件用戶’anonymous@sunet.se’的用戶身份’anonymous'(匿名)打開到’ftp.sunet.se’的連接,然後使用 dir()方法列出FTP服務器上的文件和目錄。輸出將保存到’files’變量。
然後,我使用打印在屏幕上查看文件。如果我想更改目錄,則隻需使用ftp.cwd(path)即可。要關閉FTP連接,請使用 quit()方法。
import ftplib
ftp = ftplib.FTP('ftp.sunet.se', 'anonymous', 'anonymous@sunet.se')
print "File List: "
files = ftp.dir()
print files
ftp.cwd("/pub/unix") #changing to /pub/unix
常見的FTP方法
FTP.connect(主機[,端口[,超時]])
連接到給定的主機和端口。默認端口號是21,由FTP協議規範指定。很少需要指定其他端口號。對於每個實例僅應調用一次此函數,如果在創建實例時給出了主機,則根本不應調用此函數。所有其他方法隻能在這個連接已取得後使用
。可選的timeout參數指定連接嘗試的超時時間(以秒為單位)。如果沒有超時,則使用全局默認超時設置。
FTP.getwelcome()
返回服務器發送的歡迎消息以回複初始連接。該消息有時包含與用戶可能相關的免責聲明或幫助信息
FTP.login([用戶[,passwd [,acct]]])
以給定用戶身份登錄。 passwd和acct參數是可選的,默認為空字符串。如果未指定用戶,則默認為’anonymous’。
如果用戶為’anonymous’,則默認密碼為’anonymous@’。
建立連接後,對於每個實例僅應調用一次此函數。如果在實例時給出了主機和用戶已創建,則根本不應調用它。
隻有在客戶端登錄後,才允許大多數FTP命令。acct參數提供“accounting information”;很少有係統實現這一點。
FTP.retrbinary(command,callback [,maxblocksize [,rest]])
以二進製傳輸模式檢索文件。命令應該是適當的RETR命令:’RETR filename’。對於每個接收到的數據塊,將調用回調函數,並使用單個字符串參數指定該數據塊。
可選的maxblocksize參數指定在為執行實際傳輸而創建的底層套接字對象上讀取的最大塊大小。
選擇一個合理的默認值。其餘與 transfercmd()方法中的含義相同。
FTP.retrlines(command [,callback])
以ASCII傳輸模式檢索文件或目錄列表。命令應為適當的RETR命令或LIST,NLST或MLSD之類的命令。
LIST檢索文件列表以及有關這些文件的信息。
NLST檢索文件名列表。
在某些服務器上,MLSD檢索機器可讀的文件列表以及有關這些文件的信息。每一行都使用一個字符串參數調用回調函數,該參數包含刪除了尾隨CRLF的行。默認回調將行打印到sys.stdout。
FTP.dir(參數[,…])
生成目錄列表(類似LIST命令),將其打印到標準輸出中。可選參數是要列出的目錄(默認為當前服務器目錄)。可以使用多個參數將非標準選項傳遞給LIST命令。如果最後一個參數是一個函數,則將其用作與 retrlines()相同的回調函數。默認打印到sys.stdout。此方法返回無。
FTP.delete(filename)
從服務器中刪除名為filename的文件。如果成功,則返回響應的文本,否則在權限錯誤時引發error_perm,在其他錯誤時引發error_reply。
FTP.cwd(pathname)
pathname是路徑名,在服務器上跳轉到當前目錄。
FTP.mkd(pathname)
pathname是路徑名,在服務器上創建一個新目錄。
FTP.pwd()
返回服務器上當前目錄的路徑名。
FTP.quit()
將QUIT命令發送到服務器並關閉連接。這是比FTP.close()更“polite”(禮貌)關閉連接的方法,但是如果服務器對QUIT命令返回錯誤,則可能會引發異常。這意味著將調用 close()方法,該方法使FTP實例對於後續調用無效。
FTP.close()
單方麵關閉連接。這不應應用於已經關閉的連接,例如在成功調用 quit()之後。在此調用之後,不應再使用FTP實例。調用 close()或 quit()之後,您將無法通過發出另一個 login()方法來重新打開連接。
有關更多信息,請參見官方Python文檔