python的學習(十三)---- ftplib模組
阿新 • • 發佈:2019-01-22
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.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()