python ftplib_python:使用ftplib编写FTP客户端
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下載客戶端,如果需要上傳客戶端,請修改下就可以了。#!/usr/local/bin/python2.7
#?-*-?coding:?utf-8?-*-
'''
使用ftplib編寫FTP客戶端連接,并指定目錄下載。
'''
__author__?=?'sunday208'
__date__?="2016-02-25?12:50"
import?ftplib?,socket
from?sys?import?exit
import?os
class?DOFTP():
def?__init__(self):
#定義公用變量
self.RED_COLOR='\033[1;31;48m'??#紅?,配置終端輸出的顏色
self.BLUE_COLOR='\033[1;34;48m'??#紅?,配置終端輸出的顏色
self.RES='\033[0m'
def?FTP_DOWN(self,HostIP,SerPort,FtpUser,FtpPasswd,RootDir,Server_files,Local_dir):
MyFTP?=?ftplib.FTP()
try:
MyFTP.connect(host=HostIP,port=SerPort,timeout=5)
print?'%s*****已經成功連接"%s"服務器FTP服務!%s'?%?(self.BLUE_COLOR,HostIP,self.RES)
except?(socket.error,?socket.gaierror),?e:
print?'%s錯誤:無法訪問"%s"?FTP服務,請檢查!錯誤代碼為"%s"%s'?%?(self.RED_COLOR,HostIP,e,self.RES)
exit()
try:
MyFTP.login(user=FtpUser,passwd=FtpPasswd)
print?'%s*****已經成功登陸"%s"服務器FTP服務!%s'?%?(self.BLUE_COLOR,HostIP,self.RES)
print?MyFTP.getwelcome()#顯示ftp服務器歡迎信息
except?(ftplib.error_perm),?e:
print?'%s錯誤:登陸失敗!,請檢查用戶名"%s“密碼"%s"是否正確!錯誤代碼為"%s"%s'?%?(self.RED_COLOR,FtpUser,FtpPasswd,e,self.RES)
exit()
MyFTP.cwd(RootDir)?#進入FTP目錄
FTP_files?=?MyFTP.nlst()???#取FTP當前目錄內容
if?not?Server_files:??#如果要下載為空,將下載該目錄全部內容
DownLists?=?FTP_files
print?"FTP全部目錄%s"%?DownLists
else:
#判斷指定下載的文件是否在FTP目錄中。
DownLists?=?[]???#下載列表
NODownLists?=[]??#沒有下載列表
for?line?in?Server_files:
if?line?in?FTP_files:
DownLists.append(line)
else:
NODownLists.append(line)
if?NODownLists:
print?"%s在FTP服務器并沒有指定文件%s。%s"%?(self.RED_COLOR,",".join(NODownLists),self.RES)
if?DownLists:
print?"%s正在從FTP服務器下載如下文件%s。%s"%?(self.BLUE_COLOR,",".join(DownLists),self.RES)
bufsize?=?1024
for?line?in?DownLists:
FileName?=?open(Local_dir?+?line,'wb').write
MyFTP.retrbinary('RETR?%s'?%?os.path.basename(line),FileName,bufsize)
MyFTP.quit()
print?"%sFTP已經成功退出。%s"%?(self.BLUE_COLOR,self.RES)
if?__name__?==?"__main__":
HostIP='XXXXX'???#FTP服務器IP或者域名
SerPort='21'??????#FTP端口
FtpUser='ftpuser'???#FTP用戶
FtpPasswd='XXXXXX'?#FTP對應用戶密碼
RootDir='/test'???#FTP目錄
Server_files?=?['1.txt','2.txt','3.txt','4.txt']??#下載服務器文件列表
#Server_files?=?[]?#如果要下載為空,將下載該目錄全部內容
Local_dir?="D:/testtmp/downfile/"??#本地目錄
#Local_files?=['a.txt','b.txt']??#上傳服務器本地文件列表
s?=?DOFTP()
if?os.path.exists(Local_dir)==?False:??#判斷本地是否有該文件目錄,如果沒有,將創建
try:
os.mkdir(Local_dir)
print?"%s創建本地目錄'%s'%s"%?(s.BLUE_COLOR,Local_dir,s.RES)
except:
print?"%s無法創建本地目錄'%s',原因是無該盤符或者目錄路徑有問題,程序直接退出!%s"%?(s.RED_COLOR,Local_dir,s.RES)
exit()?#退出程序
s.FTP_DOWN(HostIP,SerPort,FtpUser,FtpPasswd,RootDir,Server_files,Local_dir)
執行結果如下:
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python ftplib_python:使用ftplib编写FTP客户端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python进行对应分析_机器学习算法-
- 下一篇: python局域网大文件_[源码]Pyt