python ftp操作

本文介绍了一个使用Python实现的FTP客户端类,包含ftp_login、download_file、upload_file和upload_folder方法,展示了如何通过FTP进行文件的上传和下载操作,适用于Python开发者进行网络文件交互。
摘要由CSDN通过智能技术生成
import os
import sys
from ftplib import FTP


class FTPClient(FTP):
    """ FTP 客户端 """

    def ftplogin(self, host, port, username, password):
        """ 登录 """
        self.connect(host, port)
        self.login(username, password)

    def downloadfile(self, remotepath, localpath=None):
        """ 下载文件 """
        bufsize = 1024
        if localpath is None:
            localpath = os.path.basename(remotepath)
        fp = open(localpath, 'wb')
        self.retrbinary('RETR ' + remotepath, fp.write, bufsize)
        self.set_debuglevel(0)
        fp.flush()
        fp.close()
        print('文件 %s 下载成功!'%remotepath)

    def uploadfile(self, localpath, remotepath=None):
        """ 上传文件 """
        bufsize = 1024
        # self.cwd("/td")
        if remotepath is None:
            remotepath = os.path.basename(localpath)
        # os.path.abspath()
        fp = open(localpath, 'rb')
        self.storbinary('STOR ' + remotepath, fp, bufsize)
        self.set_debuglevel(0)
        fp.close()
        print('文件%s上传成功!'%localpath)

    def uploadfolder(self, localpath):
        """ 上传文件夹 """
        bufsize = 1024
        _fold = os.path.basename(localpath)
        try:
            self.mkd(_fold)
        except Exception as exc:
            if 'exists' in str(exc):
                cz = input('目录 %s 已经存在,是否覆盖其所有文件(Y/N):'%_fold)
                if cz != 'Y':
                    return
        self.cwd(_fold)
        next_fold = []
        for i in os.listdir(localpath):
            _f = os.path.join(localpath, i)
            if os.path.isfile(_f):
                fp = open(_f, 'rb+')
                self.storbinary('STOR ' + i, fp, bufsize)
                self.set_debuglevel(0)
                fp.close()
            elif os.path.isdir(_f):
                next_fold.append((_fold, _f))

        for j, i in next_fold:
            v = self.pwd().split('/')
            if j != v[-1]:
                self.cwd('../')
            self.uploadfolder(i)
        self.cwd("/")
        print('文件夹%s上传成功!'%localpath)


if __name__ == '__main__':
    src_host="xxx"
    src_port=21
    src_user="xx"
    src_password="xx"
    srcFTP=FTPClient()
    srcFTP.ftplogin(src_host, src_port, src_user, src_password)
    # 下载文件
    srcFTP.downloadfile("a.txt","/data/sde/a.txt")  # 下载文件
    srcFTP.quit()
    host = 'xxxx'  # IP
    port = 21  # 端口
    user = 'xx'  # 用户名
    password = 'xx'  # 密码
    ftp = FTPClient()
    ftp.ftplogin(host, port, user, password)  # 登录
    ftp.uploadfile("/data/sde/a.txt", "a.txt")
    ftp.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值