1. 程式人生 > >python的學習(十三)---- ftplib模組

python的學習(十三)---- ftplib模組

Python中的ftplib模組

Python中預設安裝的ftplib模組定義了FTP類,其中函式有限,可用來實現簡單的ftp客戶端,用於上傳或下載檔案

FTP的工作流程及基本操作可參考協議RFC959

ftp登陸連線

from ftplib import FTP #載入ftp模組

ftp=FTP() #設定變數
ftp.set_debuglevel(2) #開啟除錯級別2,顯示詳細資訊
ftp.connect("IP","port") #連線的ftp sever和埠
ftp.login("user","password")#連線的使用者名稱,密碼
print ftp.getwelcome() #打印出歡迎資訊
ftp.cmd("xxx/xxx") #更改遠端目錄
bufsize=1024 #設定的緩衝區大小
filename="filename.txt" #需要下載的檔案
file_handle=open(filename,"wb").write #以寫模式在本地開啟檔案
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收伺服器上檔案並寫入本地檔案
ftp.set_debuglevel(0) #關閉除錯模式
ftp.quit #退出ftp

ftp相關命令操作

ftp.cwd(pathname) #設定FTP當前操作的路徑
ftp.dir() #顯示目錄下檔案資訊
ftp.nlst() #獲取目錄下的檔案
ftp.mkd(pathname) #新建遠端目錄
ftp.pwd() #返回當前所在位置
ftp.rmd(dirname) #刪除遠端目錄
ftp.delete(filename) #刪除遠端檔案
ftp.rename(fromname, toname)#將fromname修改名稱為toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上傳目標檔案
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下載FTP檔案

網上找到一個具體的例子:

# 例:FTP程式設計
from ftplib import FTP
    
ftp = FTP()
timeout = 30
port = 21
ftp.connect('192.168.1.188',port,timeout) # 連線FTP伺服器
ftp.login('UserName','888888') # 登入
print ftp.getwelcome()  # 獲得歡迎資訊 
ftp.cwd('file/test')    # 設定FTP路徑
list = ftp.nlst()       # 獲得目錄列表
for name in list:
    print(name)             # 列印檔名字
path = 'd:/data/' + name    # 檔案儲存路徑
f = open(path,'wb')         # 開啟要儲存檔案
filename = 'RETR ' + name   # 儲存FTP檔案
ftp.retrbinary(filename,f.write) # 儲存FTP上的檔案
ftp.delete(name)            # 刪除FTP檔案
ftp.storbinary('STOR '+filename, open(path, 'rb')) # 上傳FTP檔案
ftp.quit()                  # 退出FTP伺服器

完整的模板:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import ftplib
import os
import socket

HOST = 'ftp.mozilla.org'
DIRN = 'pub/mozilla.org/webtools'
FILE = 'bugzilla-3.6.7.tar.gz'
def main():
    try:
        f = ftplib.FTP(HOST)
    except (socket.error, socket.gaierror):
        print 'ERROR:cannot reach " %s"' % HOST
        return
    print '***Connected to host "%s"' % HOST

    try:
        f.login()
    except ftplib.error_perm:
        print 'ERROR: cannot login anonymously'
        f.quit()
        return
    print '*** Logged in as "anonymously"'
    try:
        f.cwd(DIRN)
    except ftplib.error_perm:
        print 'ERRORL cannot CD to "%s"' % DIRN
        f.quit()
        return
    print '*** Changed to "%s" folder' % DIRN
    try:
        #傳一個回撥函式給retrbinary() 它在每接收一個二進位制資料時都會被呼叫
        f.retrbinary('RETR %s' % FILE, open(FILE, 'wb').write)
    except ftplib.error_perm:
        print 'ERROR: cannot read file "%s"' % FILE
        os.unlink(FILE)
    else:
        print '*** Downloaded "%s" to CWD' % FILE
    f.quit()
    return

if __name__ == '__main__':
    main()