Python FTP

Python FTP

FTP或文件傳輸協(xié)議是一種眾所周知的網(wǎng)絡(luò)協(xié)議,用于在網(wǎng)絡(luò)中的計(jì)算機(jī)之間傳輸文件。它是在客戶端服務(wù)器體系結(jié)構(gòu)上創(chuàng)建的,可以與用戶身份驗(yàn)證一起使用。也可以在不進(jìn)行身份驗(yàn)證的情況下使用它,但這將降低安全性。FTP連接保持當(dāng)前的工作目錄和其他標(biāo)志,并且每次傳輸都需要一個(gè)輔助連接,通過(guò)該連接可以傳輸數(shù)據(jù)。大多數(shù)常見(jiàn)的Web瀏覽器都可以檢索FTP服務(wù)器上托管的文件。

1. FTP類中的方法

在python中,我們使用ftplib模塊,該模塊具有以下必需的方法來(lái)列出文件,因?yàn)樾枰褂肍TP來(lái)傳輸文件。

方法 描述
pwd() 當(dāng)前工作目錄。
cwd() 將當(dāng)前工作目錄更改為指定路徑。
dir([path[,...[,cb]]) 顯示路徑的目錄列表。傳遞給retrlines()的可選回調(diào)cb。
storlines(cmd, f) 使用給定的FTP cmd上傳文本文件-例如STOR文件名。
storbinary(cmd,f[, bs=8192]) 與storlines()類似,但用于二進(jìn)制文件。
delete(path) 刪除指定路徑下的遠(yuǎn)程文件。
mkd(directory) 創(chuàng)建遠(yuǎn)程目錄。
exception ftplib.error_temp 當(dāng)收到表示臨時(shí)錯(cuò)誤的錯(cuò)誤代碼(響應(yīng)代碼在400-499范圍內(nèi))時(shí),引發(fā)異常。
exception ftplib.error_perm 當(dāng)收到表示永久錯(cuò)誤的錯(cuò)誤代碼(響應(yīng)代碼在500–599范圍內(nèi))時(shí),引發(fā)異常。
connect(host[, port[, timeout]]) 連接到給定的主機(jī)和端口。默認(rèn)端口號(hào)是21,由FTP協(xié)議指定。
quit() 關(guān)閉連接并退出。

以下是上述某些方法的示例。

2. 列出文件

下面的示例使用匿名登錄ftp服務(wù)器并列出當(dāng)前目錄的內(nèi)容。它處理文件和目錄的名稱,并將它們存儲(chǔ)為列表。然后將它們打印出來(lái)。

 
# Filename : example.py
# Copyright : 2020 By Codebaoku
# Author by : www.slktour.com
# Date : 2020-08-25
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
 

執(zhí)行上面示例代碼,得到以下結(jié)果:

 
# Filename : example.py
# Copyright : 2020 By Codebaoku
# Author by : www.slktour.com
# Date : 2020-08-25
- 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
  

3. 更改目錄

下面的程序使用ftplib模塊中可用的cwd方法來(lái)更改目錄,然后獲取所需的內(nèi)容。

 
# Filename : example.py
# Copyright : 2020 By Codebaoku
# Author by : www.slktour.com
# Date : 2020-08-25
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
  
 

執(zhí)行上面示例代碼,得到以下結(jié)果:

 
# Filename : example.py
# Copyright : 2020 By Codebaoku
# Author by : www.slktour.com
# Date : 2020-08-25
- 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
 

4. 提取文件

如上所示獲取文件列表后,可以使用getfile方法獲取特定文件。此方法將文件的副本從遠(yuǎn)程系統(tǒng)移動(dòng)到啟動(dòng)ftp連接的本地系統(tǒng)。

 
# Filename : example.py
# Copyright : 2020 By Codebaoku
# Author by : www.slktour.com
# Date : 2020-08-25
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()
  
 

當(dāng)運(yùn)行上述程序時(shí),就會(huì)發(fā)現(xiàn)文件README.nlug存在于啟動(dòng)連接的本地系統(tǒng)中。

下一節(jié):Python SFTP

Python 網(wǎng)絡(luò)編程

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频