博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
py实现ftp
阅读量:6761 次
发布时间:2019-06-26

本文共 3301 字,大约阅读时间需要 11 分钟。

  

参考原始代码:

修改了一下:

 许多网友问中文路径乱码怎么办,我觉得应该讲中文路径转码后再发送。

ftpath = '/home/omcr/文档/{}'.format(y).encode('utf-8').decode('latin-1')
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2019/4/12 22:00# @Author  : zengsk in HoHai# edited by wh'''FTP批量下载数据'''import osimport sysfrom ftplib import FTPimport datetimeclass FtpDownloadCls:    def __init__(self, ftpserver, port, usrname, pwd, encode1, decode1):        self.ftpserver = ftpserver # ftp主机IP        self.port = port          # ftp端口        self.usrname = usrname  # 登陆用户名        self.pwd = pwd          # 登陆密码        self.ftp = self.ftpConnect()        # 用于中文编码解码,        self.encode1 = encode1        self.decode1 = decode1    # ftp连接    def ftpConnect(self):        ftp = FTP()        try:            ftp.connect(self.ftpserver, self.port)            ftp.login(self.usrname, self.pwd)       # python ftplib 默认的编码方式是latin-1            self.encode1 = ftp.encoding        except:            raise IOError('\n FTP login failed!!!')        else:            print(ftp.getwelcome())            print('\n+------- FTP connection successful!!! --------+\n')            return ftp    # 单个文件下载到本地    def downloadFile(self, ftpfile, localfile):        bufsize = 1024     # 要在本地正确的显示中文,需要先通过latin-1编码成unicode,在解码成utf-8或GBK        with open(localfile.encode(self.encode1).decode(self.decode1), 'wb') as fid:            self.ftp.retrbinary('RETR {0}'.format(ftpfile), fid.write, bufsize)        return True    # 下载整个目录下的文件,包括子目录文件    def downloadFiles(self, ftpath, localpath):        print('FTP PATH: {0}'.format(ftpath))        if not os.path.exists(localpath):            os.makedirs(localpath)        self.ftp.cwd(ftpath)        print('\n+----------- downloading!!! -----------+\n')        for i, file in enumerate(self.ftp.nlst()):            print('{0} <> {1}'.format(i, file))            local = os.path.join(localpath, file)            if os.path.isdir(file): # 判断是否为子目录                if not os.path.exists(local):                    os.makedirs(local)                self.downloadFiles(file, local)            else:                self.downloadFile(file, local)        self.ftp.cwd('..')        return True    # 退出FTP连接    def ftpDisConnect(self):        self.ftp.quit()# 程序入口if __name__ == '__main__':    yesterday = (datetime.datetime.now() - datetime.timedelta(days = 1))    y = yesterday.strftime("%Y%m%d")    # 输入参数    ftpserver = '10.20.20.1' # ftp主机IP    port = 21                                  # ftp端口    usrname = 'omcr'       # 登陆用户名    pwd = 'abcd.1'       # 登陆密码    #ftpath = '/export/home/omcr/UMS8800_WKM_TDL_V3.0.0_26_20171013/LTE_WKM/webapps/WKMService/reportfile/计划报表/20190623/'  # 远程文件夹    # 想要将路径中的中文正确发送到ftp服务器,需要先通过本地编码utf-8转换为unicode,在编码为latin-1,这样才能被ftplib模块正确发送给ftp服务器,虽然发送过去的中文编码是乱的    # 但服务器可以识别    ftpath = '/home/omcr/文档/{}'.format(y).encode('utf-8').decode('latin-1')    localpath = 'D:/EC/data/{}'.format(y)                # 本地文件夹(不要使用中文)    Ftp = FtpDownloadCls(ftpserver, port, usrname, pwd, 'latin-1', 'utf-8')    Ftp.downloadFiles(ftpath, localpath)    Ftp.ftpDisConnect()    print("\n+-------- OK!!! --------+\n")    # 删除多余文件    dirPath = r'D:/EC/data'    x = ''    for f in os.listdir(dirPath):    if not x in f:        os.remove(os.path.join(dirPath, f))

  

转载于:https://www.cnblogs.com/wangziyi0513/p/11077323.html

你可能感兴趣的文章
iOS buttonWithType:101 苹果私有api
查看>>
条款10:令operator=返回一个reference to *this
查看>>
单例模式
查看>>
.NET实现多个不同有效时间Session方案思考
查看>>
移动端常见问题及解决方案
查看>>
Github 使用的Markdown语言
查看>>
UVA 247 - Calling Circles (Floyd)
查看>>
Exchange: How to get Mailbox size in Exchange Shell?
查看>>
SqlBulkCopy使用心得
查看>>
几点要求自己也可以借鉴
查看>>
Highcharts的一些属性
查看>>
Django 中间件
查看>>
学城项目知识点整理及源码
查看>>
sqlServer,oracle中case关键字的用法
查看>>
表驱动法之保险费率
查看>>
苹果硅胶套市场空间上百亿:合作厂商利润达30%
查看>>
娇俏2011年春装
查看>>
备份还原oracle数据库
查看>>
[转载] AUML——FIPA Modeling Technical Committee
查看>>
Samba Server Configuration - Simple
查看>>