pythonnlst-九游会j9娱乐平台
importftplib,socket
defconnect():
const_host="xxxx.xxxx.xxx"
const_username="xxxxx"
const_pwd="xxxxxxx"
try:
ftp=ftplib.ftp(const_host)
ftp.login(const_username,const_pwd)
returnftp
exceptsocket.error,socket.gaierror:
print("ftpisunavailable,pleasecheckthehost,usernameandpassword!")
sys.exit(0)
defdisconnect(ftp):
ftp.quit()
defdownload(ftp,filename):
#預定義每次寫文件的buffer
const_buffer_size=8192
f=open(filename,"wb").write
try:
ftp.retrbinary("retr%s"%filename,f,const_buffer_size)
exceptftplib.error_perm:
returnfalse
returntrue
deffind(ftp,filename):
ftp_f_list=ftp.nlst()
iffilenameinftp_f_list:
returntrue
else:
returnfalse
ftp=connect()
#yourfile為你想要下載的文件
iffind(ftp,'yourfile'):
download(ftp,'yourfile')
disconnect(ftp)
② python 檢測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文件
③ 用python寫測試腳本,從本地傳文件至ftp遠程路徑
轉自:http://news.tuxi.com.cn/kf/article/jhtdj.htm
本文實例講述了python實現支持目錄ftp上傳下載文件的方法。分享給大家供大家參考。具體如下:
該程序支持ftp上傳下載文件和目錄、適用於windows和linux平台。
#!/usr/bin/envpython
#-*-coding:utf-8-*-
importftplib
importos
importsys
classftpsync(object):
conn=ftplib.ftp()
def__init__(self,host,port=21):
self.conn.connect(host,port)
deflogin(self,username,password):
self.conn.login(username,password)
self.conn.set_pasv(false)
printself.conn.welcome
deftest(self,ftp_path):
printftp_path
printself._is_ftp_dir(ftp_path)
#printself.conn.nlst(ftp_path)
#self.conn.retrlines('list./a/b')
#ftp_parent_path=os.path.dirname(ftp_path)
#ftp_dir_name=os.path.basename(ftp_path)
#printftp_parent_path
#printftp_dir_name
def_is_ftp_file(self,ftp_path):
try:
ifftp_pathinself.conn.nlst(os.path.dirname(ftp_path)):
returntrue
else:
returnfalse
exceptftplib.error_perm,e:
returnfalse
def_ftp_list(self,line):
list=line.split('')
ifself.ftp_dir_name==list[-1]andlist[0].startswith('d'):
self._is_dir=true
def_is_ftp_dir(self,ftp_path):
ftp_path=ftp_path.rstrip('/')
ftp_parent_path=os.path.dirname(ftp_path)
self.ftp_dir_name=os.path.basename(ftp_path)
self._is_dir=false
ifftp_path=='.'orftp_path=='./'orftp_path=='':
self._is_dir=true
else:
#thisuescallbackfunction,thatwillchange_is_dirvalue
try:
self.conn.retrlines('list%s'%ftp_parent_path,self._ftp_list)
exceptftplib.error_perm,e:
returnself._is_dir
returnself._is_dir
defget_file(self,ftp_path,local_path='.'):
ftp_path=ftp_path.rstrip('/')
ifself._is_ftp_file(ftp_path):
file_name=os.path.basename(ftp_path)
#如果本地路徑是目錄,下載文件到該目錄
ifos.path.isdir(local_path):
file_handler=open(os.path.join(local_path,file_name),'wb')
self.conn.retrbinary("retr%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路徑不是目錄,但上層目錄存在,則按照本地路徑的文件名作為下載的文件名稱
elifos.path.isdir(os.path.dirname(local_path)):
file_handler=open(local_path,'wb')
self.conn.retrbinary("retr%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路徑不是目錄,且上層目錄不存在,則退出
else:
print'eroor:thedir:%sisnotexist'%os.path.dirname(local_path)
else:
print'eroor:theftpfile:%sisnotexist'%ftp_path
defput_file(self,local_path,ftp_path='.'):
ftp_path=ftp_path.rstrip('/')
ifos.path.isfile(local_path):
file_handler=open(local_path,"r")
local_file_name=os.path.basename(local_path)
#如果遠程路徑是個目錄,則上傳文件到這個目錄,文件名不變
ifself._is_ftp_dir(ftp_path):
self.conn.storbinary('stor%s'%os.path.join(ftp_path,local_file_name),file_handler)
#如果遠程路徑的上層是個目錄,則上傳文件,文件名按照給定命名
elifself._is_ftp_dir(os.path.dirname(ftp_path)):
print'stor%s'%ftp_path
self.conn.storbinary('stor%s'%ftp_path,file_handler)
#如果遠程路徑不是目錄,且上一層的目錄也不存在,則提示給定遠程路徑錯誤
else:
print'eroor:theftppath:%siserror'%ftp_path
file_handler.close()
else:
print'error:thefile:%sisnotexist'%local_path
defget_dir(self,ftp_path,local_path='.',begin=true):
ftp_path=ftp_path.rstrip('/')
#當ftp目錄存在時下載
ifself._is_ftp_dir(ftp_path):
#如果下載到本地當前目錄下,並創建目錄
#下載初始化:如果給定的本地路徑不存在需要創建,同時將ftp的目錄存放在給定的本地目錄下。
#ftp目錄下文件存放的路徑為local_path=local_path os.path.basename(ftp_path)
#例如:將ftp文件夾a下載到本地的a/b目錄下,則ftp的a目錄下的文件將下載到本地的a/b/a目錄下
ifbegin:
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
local_path=os.path.join(local_path,os.path.basename(ftp_path))
#如果本地目錄不存在,則創建目錄
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
#進入ftp目錄,開始遞歸查詢
self.conn.cwd(ftp_path)
ftp_files=self.conn.nlst()
forfileinftp_files:
local_file=os.path.join(local_path,file)
#如果fileftp路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為false)
#如果fileftp路徑是文件則直接上傳文件
ifself._is_ftp_dir(file):
self.get_dir(file,local_file,false)
else:
self.get_file(file,local_file)
#如果當前ftp目錄文件已經遍歷完畢返回上一層目錄
self.conn.cwd("..")
return
else:
print'error:thedir:%sisnotexist'%ftp_path
return
defput_dir(self,local_path,ftp_path='.',begin=true):
ftp_path=ftp_path.rstrip('/')
#當本地目錄存在時上傳
ifos.path.isdir(local_path):
#上傳初始化:如果給定的ftp路徑不存在需要創建,同時將本地的目錄存放在給定的ftp目錄下。
#本地目錄下文件存放的路徑為ftp_path=ftp_path os.path.basename(local_path)
#例如:將本地文件夾a上傳到ftp的a/b目錄下,則本地a目錄下的文件將上傳的ftp的a/b/a目錄下
ifbegin:
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
ftp_path=os.path.join(ftp_path,os.path.basename(local_path))
#如果ftp路徑不是目錄,則創建目錄
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
#進入本地目錄,開始遞歸查詢
os.chdir(local_path)
local_files=os.listdir('.')
forfileinlocal_files:
#如果file本地路徑是目錄則遞歸上傳目錄(不需要再進行初始化begin的標志修改為false)
#如果file本地路徑是文件則直接上傳文件
ifos.path.isdir(file):
ftp_path=os.path.join(ftp_path,file)
self.put_dir(file,ftp_path,false)
else:
self.put_file(file,ftp_path)
#如果當前本地目錄文件已經遍歷完畢返回上一層目錄
os.chdir("..")
else:
print'error:thedir:%sisnotexist'%local_path
return
if__name__=='__main__':
ftp=ftpsync('192.168.1.110')
ftp.login('test','test')
#上傳文件,不重命名
#ftp.put_file('111.txt','a/b')
#上傳文件,重命名
#ftp.put_file('111.txt','a/112.txt')
#下載文件,不重命名
#ftp.get_file('/a/111.txt',r'd:\')
#下載文件,重命名
#ftp.get_file('/a/111.txt',r'd:112.txt')
#下載到已經存在的文件夾
#ftp.get_dir('a/b/c',r'd:\a')
#下載到不存在的文件夾
#ftp.get_dir('a/b/c',r'd:\aa')
#上傳到已經存在的文件夾
ftp.put_dir('b','a')
#上傳到不存在的文件夾
ftp.put_dir('b','aa/b/')
希望本文所述對大家的python程序設計有所幫助。
以下轉自:http://blog.csdn.net/linda1000/article/details/8255771
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編程
fromftplibimportftp
ftp=ftp()
timeout=30
port=21
ftp.connect('192.168.1.188',port,timeout)#連接ftp伺服器
ftp.login('username','888888')#登錄
printftp.getwelcome()#獲得歡迎信息
ftp.cwd('file/test')#設置ftp路徑
list=ftp.nlst()#獲得目錄列表
fornameinlist:
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-*-
importftplib
importos
importsocket
host='ftp.mozilla.org'
dirn='pub/mozilla.org/webtools'
file='bugzilla-3.6.7.tar.gz'
defmain():
try:
f=ftplib.ftp(host)
except(socket.error,socket.gaierror):
print'error:cannotreach"%s"'%host
return
print'***connectedtohost"%s"'%host
try:
f.login()
exceptftplib.error_perm:
print'error:cannotloginanonymously'
f.quit()
return
print'***loggedinas"anonymously"'
try:
f.cwd(dirn)
exceptftplib.error_perm:
print'errorlcannotcdto"%s"'%dirn
f.quit()
return
print'***changedto"%s"folder'%dirn
try:
#傳一個回調函數給retrbinary()它在每接收一個二進制數據時都會被調用
f.retrbinary('retr%s'%file,open(file,'wb').write)
exceptftplib.error_perm:
print'error:cannotreadfile"%s"'%file
os.unlink(file)
else:
print'***downloaded"%s"tocwd'%file
f.quit()
return
if__name__=='__main__':
main()