python实现ftp的基本功能

时间:2021-09-24 03:14:16
这篇文章主要介绍了Python使用ftplib实现简易FTP客户端的方法,实例分析了ftplib模块相关设置与使用技巧,需要的朋友可以参考下

本文实例讲述了Python使用ftplib实现简易FTP客户端的方法。分享给大家供大家参考。具体实现方法如下:

#!/usr/bin/python
#-*- coding:utf-8 -*- 
fromftplib importFTP   #加载ftp模块
ftp=FTP()         #设置变量
ftp.set_debuglevel(2)   #打开调试级别2,显示详细信息
ftp.connect("IP","port") #连接的ftp sever和端口 
ftp.login("user","password")#连接的用户名,密码
printftp.getwelcome()   #打印出欢迎信息
ftp.cwd("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.dir()         #显示目录下文件信息
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完整实例:

?
#coding:utf-8
fromctypes import*
importos 
importsys 
importftplib 
classmyFtp: 
  ftp=ftplib.FTP() 
  bIsDir=False
  path="" 
  def__init__(self, host, port='21'):
    self.ftp.set_debuglevel(2)#打开调试级别2,显示详细信息 
    #self.ftp.set_pasv(0)  #0主动模式 1 #被动模式 
    self.ftp.connect( host, port ) 
  defLogin(self, user, passwd ): 
    self.ftp.login( user, passwd ) 
    printself.ftp.welcome
  defDownLoadFile( self, LocalFile, RemoteFile ): 
    file_handler=open( LocalFile, 'wb') 
    self.ftp.retrbinary("RETR %s" %( RemoteFile ), file_handler.write )  
    file_handler.close()
    returnTrue
  defUpLoadFile( self, LocalFile, RemoteFile ): 
    ifos.path.isfile( LocalFile ) ==False:
      returnFalse
    file_handler=open( LocalFile, "rb") 
    self.ftp.storbinary('STOR %s'%RemoteFile, file_handler, 4096)
    file_handler.close()
    returnTrue
  defUpLoadFileTree( self, LocalDir, RemoteDir ): 
    ifos.path.isdir( LocalDir ) ==False:
      returnFalse
    LocalNames=os.listdir( LocalDir ) 
    printRemoteDir 
    self.ftp.cwd( RemoteDir ) 
    forLocal inLocalNames: 
      src=os.path.join( LocalDir, Local) 
      ifos.path.isdir( src ): 
        self.UpLoadFileTree( src, Local ) 
      else:
        self.UpLoadFile( src, Local ) 
    self.ftp.cwd("..") 
    return
  defDownLoadFileTree( self, LocalDir, RemoteDir ): 
    ifos.path.isdir( LocalDir ) ==False:
      os.makedirs( LocalDir ) 
    self.ftp.cwd( RemoteDir ) 
    RemoteNames=self.ftp.nlst() 
    forfile in RemoteNames: 
      Local=os.path.join( LocalDir, file) 
      ifself.isDir(file): 
        self.DownLoadFileTree( Local, file)         
      else:
        self.DownLoadFile( Local, file) 
    self.ftp.cwd("..") 
    return
  defshow( self,list): 
    result=list.lower().split(" " ) 
    ifself.pathinresult and"<dir>" in result: 
      self.bIsDir=True
  defisDir( self, path ): 
    self.bIsDir=False
    self.path=path 
    #this ues callback function ,that will change bIsDir value 
    self.ftp.retrlines('LIST',self.show ) 
    returnself.bIsDir
  defclose( self): 
    self.ftp.quit()
ftp=myFtp('********')
ftp.Login('*****','*****')
#ftp.DownLoadFile('TEST.TXT', 'others\\runtime.log')#ok 
#ftp.UpLoadFile('runtime.log', 'others\\runtime.log')#ok 
#ftp.DownLoadFileTree('bcd', 'others\\abc')#ok 
#ftp.UpLoadFileTree('aaa',"others\\" ) 
ftp.close()
print"ok!"


希望本文所述对大家的Python程序设计有所帮助。