Python FTP

FTP或檔傳輸協議是一種眾所周知的網路協議,用於在網路中的電腦之間傳輸檔。它是在客戶端伺服器體系結構上創建的,可以與用戶身份驗證一起使用。也可以在不進行身份驗證的情況下使用它,但這將降低安全性。FTP連接保持當前的工作目錄和其他標誌,並且每次傳輸都需要一個輔助連接,通過該連接可以傳輸數據。大多數常見的Web流覽器都可以檢索FTP伺服器上託管的檔。

1. FTP類中的方法

在python中,我們使用ftplib模組,該模組具有以下必需的方法來列出檔,因為需要使用FTP來傳輸檔。

方法 描述
pwd() 當前工作目錄。
cwd() 將當前工作目錄更改為指定路徑。
dir([path[,...[,cb]]) 顯示路徑的目錄列表。傳遞給retrlines()的可選回調cb
storlines(cmd, f) 使用給定的FTP cmd上傳文本檔-例如STOR檔案名。
storbinary(cmd,f[, bs=8192]) storlines()類似,但用於二進位檔。
delete(path) 刪除指定路徑下的遠程檔。
mkd(directory) 創建遠程目錄。
exception ftplib.error_temp 當收到表示臨時錯誤的錯誤代碼(回應代碼在400-499範圍內)時,引發異常。
exception ftplib.error_perm 當收到表示永久錯誤的錯誤代碼(回應代碼在500–599範圍內)時,引發異常。
connect(host[, port[, timeout]]) 連接到給定的主機和端口。默認端口號是21,由FTP協議指定。
quit() 關閉連接並退出。

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

2. 列出檔

下麵的示例使用匿名登錄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

3. 更改目錄

下麵的程式使用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

4. 提取檔

如上所示獲取檔列表後,可以使用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存在於啟動連接的本地系統中。


上一篇: Python SSH 下一篇: Python SFTP