`

python 封装的一个FTP功能

阅读更多

from ctypes import *
import os
import sys
import ftplib

class KANFtp:
    ftp = ftplib.FTP()
    bIsDir = False
    path = ""
    def __init__(self, host):
        self.ftp.connect( host )
           
    def Login(self, user, passwd ):
        self.ftp.login( user, passwd )
        print self.ftp.welcome
    def DownLoadFile( self, LocalFile, RemoteFile ):
        file_handler = open( LocalFile, 'wb' )
        self.ftp.retrbinary( "RETR %s" %( RemoteFile ), file_handler.write )
        file_handler.close()
        return True
   
    def UpLoadFile( self, LocalFile, RemoteFile ):
        if os.path.isfile( LocalFile ) == False:
            return False
        file_handler = open( LocalFile, "rb" )
        self.ftp.storbinary( 'STOR %s'%RemoteFile, file_handler, 4096 )
        file_handler.close()
        return True

    def UpLoadFileTree( self, LocalDir, RemoteDir ):
        if os.path.isdir( LocalDir ) == False:
            return False
        LocalNames = os.listdir( LocalDir )
        self.ftp.cwd( RemoteDir )
        for Local in LocalNames:
            src = os.path.join( LocalDir, Local)
            if os.path.isdir( src ):
                self.UpLoadFileTree( src, Local )
            else:
                self.UpLoadFile( src, Local )
               
        self.ftp.cwd( ".." )
        return
   
    def DownLoadFileTree( self, LocalDir, RemoteDir ):
        if os.path.isdir( LocalDir ) == False:
            os.makedirs( LocalDir )
        self.ftp.cwd( RemoteDir )
        RemoteNames = self.ftp.nlst() 
        for file in RemoteNames:
            Local = os.path.join( LocalDir, file )
            if self.isDir( file ):
                self.DownLoadFileTree( Local, file )               
            else:
                self.DownLoadFile( Local, file )
        self.ftp.cwd( ".." )
        return
   
    def show( self, list  ):
        result = list.lower().split( " " )
        if self.path in result and "<dir>" in result:
            self.bIsDir = True
    
    def isDir( self, path ):
        self.bIsDir = False
        self.path = path
        #this ues callback function ,that will change bIsDir value
        self.ftp.retrlines( 'LIST', self.show )
        return self.bIsDir

ftp = KANFtp('192.168.21.10')
ftp.Login('XXX','XXXX')

#ftp.DownLoadFile('TEST.TXT', 'public\\hechangmin\\TEST.TXT')#ok
#ftp.UpLoadFile('TEST.TXT', 'public\\hechangmin\\TEST.TXT')#ok
#ftp.DownLoadFileTree('HECM', 'public\\hechangmin\\xxx\\')#ok
ftp.UpLoadFileTree('ts',"Public\\hechangmin\\testFTP" )
print "ok!"

这个是我同事代码。我只是修改一小部分。本blog以流水账形式记录着学习的点点滴滴。

分享到:
评论

相关推荐

    基于Python的FTP客户端服务端设计.zip

    整体逻辑 采用 PyQT 开发,程序整体是事件驱动的,点击某个按钮触发某个事件,再调用封装好的函数向服务器发消息即可。消息收发参考 Server,也对发送/接受指令做了封装,同时用装饰器实现了日志 (@message_log)、...

    Python文件系统抽象层PyFilesystem.zip

    它是文件系统的抽象层,任何包含文件和目录的东西(硬盘,压缩文件,FTP服务器等等)都可以封装成一个共同的接口。使用这个模块,你可以不需要知道文件确切的物理位置。下面是一个递归统计文件夹中代码行数的例子:...

    python学习

    ython的特色 1.简单 ...概括: Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。 12.规范的代码: Python采用强制缩进的方式使得代码具有极佳的可读性。

    Python Cookbook

    12.5 将一个XML文档转化成Python对象树 449 12.6 从XML DOM节点的子树中删除仅有空白符的文本节点 451 12.7 解析Microsoft Excel的XML 452 12.8 验证XML文档 454 12.9 过滤属于指定命名空间的元素和属性 455 ...

    Python核心编程第二版

     3.6 第一个Python程序   3.7 相关模块和开发工具   3.8 练习   第4章 Python对象   4.1 Python 对象   4.2 标准类型   4.3 其他内建类型   4.3.1 类型对象和type类型对象   4.3.2 None--...

    python入门到高级全栈工程师培训 第3期 附课件代码

    06 django的一个简单应用 07 django静态文件之static 08 django的url控制系统 09 django的urlConf补充 第50章 01 django之视图函数的介绍 02 django视图之redirec 03 django模板之变量 04 django模板之过滤器 05 ...

    Script.NET python 开发包

    Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 封装的TclFace页面扩展包,可以...

    Python核心编程第二版(ok)

     3.6 第一个Python程序   3.7 相关模块和开发工具   3.8 练习   第4章 Python对象   4.1 Pythonc对象   4.2 标准类型   4.3 其他内建类型   4.3.1 类型对象和type类型对象   4.3.2 None--...

    如何把matlab代码封装-SegwormMatlabClasses:重写了Segworm代码以使用Matlab类和包

    从2014年9月开始,这个仓库的想法很快就会被完全移植到Python中。 项目状态 视频转归一化蠕虫:未完成,当前工作于 将蠕虫归一化为特征:已完成,请参阅中的用法示例 统计信息的功能:已完成-请参见中的示例用法 ...

    Script.NET脚本语言开发平台2.1.1版本

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面扩展包,...

    Script.NET脚本语言开发平台

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面...

    Lua开发包 for Script.NET V2.1.1

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面扩展包,...

    Tcl开发包 for Script.NET V2.1.1

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面扩展包,...

    Ruby开发包 for Script.NET V2.1.1

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面扩展包,...

    NSIS开发包 for Script.NET V2.1.1

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面扩展包,...

    Lua开发包

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面...

    NSIS开发包

    9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面...

    RED HAT LINUX 6大全

    14.2 运行一个简单的Samba设置 243 14.2.1 使用Linux客户测试 243 14.2.2 使用Windows客户测试 244 14.3 配置Samba 245 14.3.1 [global]段 245 14.3.2 [homes]段 246 14.3.3 [printers]段 247 14.3.4 Samba打印机...

Global site tag (gtag.js) - Google Analytics