python ftplib_python:使用ftplib编写FTP客户端
Python中的ftplib模塊
Python中默認(rèn)安裝的ftplib模塊定義了FTP類,其中函數(shù)有限,可用來實(shí)現(xiàn)簡單的ftp客戶端,用于上傳或下載文件
FTP的工作流程及基本操作可參考協(xié)議RFC959
ftp登陸連接
from ftplib import FTP #加載ftp模塊
ftp=FTP() #設(shè)置變量
ftp.set_debuglevel(2) #打開調(diào)試級別2,顯示詳細(xì)信息
ftp.connect("IP","port") #連接的ftp sever和端口
ftp.login("user","password")#連接的用戶名,密碼
print ftp.getwelcome() #打印出歡迎信息
ftp.cmd("xxx/xxx") #更改遠(yuǎn)程目錄
bufsize=1024 #設(shè)置的緩沖區(qū)大小
filename="filename.txt" #需要下載的文件
file_handle=open(filename,"wb").write #以寫模式在本地打開文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服務(wù)器上文件并寫入本地文件
ftp.set_debuglevel(0) #關(guān)閉調(diào)試模式
ftp.quit #退出ftp
ftp相關(guān)命令操作
ftp.cwd(pathname) #設(shè)置FTP當(dāng)前操作的路徑
ftp.dir() #顯示目錄下文件信息
ftp.nlst() #獲取目錄下的文件
ftp.mkd(pathname) #新建遠(yuǎn)程目錄
ftp.pwd() #返回當(dāng)前所在位置
ftp.rmd(dirname) #刪除遠(yuǎn)程目錄
ftp.delete(filename) #刪除遠(yuǎn)程文件
ftp.rename(fromname, toname)#將fromname修改名稱為toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上傳目標(biāo)文件
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*****已經(jīng)成功連接"%s"服務(wù)器FTP服務(wù)!%s'?%?(self.BLUE_COLOR,HostIP,self.RES)
except?(socket.error,?socket.gaierror),?e:
print?'%s錯誤:無法訪問"%s"?FTP服務(wù),請檢查!錯誤代碼為"%s"%s'?%?(self.RED_COLOR,HostIP,e,self.RES)
exit()
try:
MyFTP.login(user=FtpUser,passwd=FtpPasswd)
print?'%s*****已經(jīng)成功登陸"%s"服務(wù)器FTP服務(wù)!%s'?%?(self.BLUE_COLOR,HostIP,self.RES)
print?MyFTP.getwelcome()#顯示ftp服務(wù)器歡迎信息
except?(ftplib.error_perm),?e:
print?'%s錯誤:登陸失敗!,請檢查用戶名"%s“密碼"%s"是否正確!錯誤代碼為"%s"%s'?%?(self.RED_COLOR,FtpUser,FtpPasswd,e,self.RES)
exit()
MyFTP.cwd(RootDir)?#進(jìn)入FTP目錄
FTP_files?=?MyFTP.nlst()???#取FTP當(dāng)前目錄內(nèi)容
if?not?Server_files:??#如果要下載為空,將下載該目錄全部內(nèi)容
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服務(wù)器并沒有指定文件%s。%s"%?(self.RED_COLOR,",".join(NODownLists),self.RES)
if?DownLists:
print?"%s正在從FTP服務(wù)器下載如下文件%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已經(jīng)成功退出。%s"%?(self.BLUE_COLOR,self.RES)
if?__name__?==?"__main__":
HostIP='XXXXX'???#FTP服務(wù)器IP或者域名
SerPort='21'??????#FTP端口
FtpUser='ftpuser'???#FTP用戶
FtpPasswd='XXXXXX'?#FTP對應(yīng)用戶密碼
RootDir='/test'???#FTP目錄
Server_files?=?['1.txt','2.txt','3.txt','4.txt']??#下載服務(wù)器文件列表
#Server_files?=?[]?#如果要下載為空,將下載該目錄全部內(nèi)容
Local_dir?="D:/testtmp/downfile/"??#本地目錄
#Local_files?=['a.txt','b.txt']??#上傳服務(wù)器本地文件列表
s?=?DOFTP()
if?os.path.exists(Local_dir)==?False:??#判斷本地是否有該文件目錄,如果沒有,將創(chuàng)建
try:
os.mkdir(Local_dir)
print?"%s創(chuàng)建本地目錄'%s'%s"%?(s.BLUE_COLOR,Local_dir,s.RES)
except:
print?"%s無法創(chuàng)建本地目錄'%s',原因是無該盤符或者目錄路徑有問題,程序直接退出!%s"%?(s.RED_COLOR,Local_dir,s.RES)
exit()?#退出程序
s.FTP_DOWN(HostIP,SerPort,FtpUser,FtpPasswd,RootDir,Server_files,Local_dir)
執(zhí)行結(jié)果如下:
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python ftplib_python:使用ftplib编写FTP客户端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python进行对应分析_机器学习算法-
- 下一篇: python局域网大文件_[源码]Pyt