• python下载ftp文件脚本


    最近更新日期:2020/11/6


    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author: bugbeta@foxmail.com
    # Date: 2020/8/20
    
    import logging
    import time
    import datetime
    import os
    
    # 日志配置
    workdir=os.path.dirname(os.path.realpath(__file__))
    logdir=workdir+'/logs'
    isExists=os.path.exists(logdir)
    if not isExists:
        os.makedirs(logdir)
    
    logfile = logdir+'/' + 'log_'+os.path.basename(__file__).split('.')[0]+".log"
    os.chdir(workdir)
    logger = logging.getLogger(__name__)
    logger.setLevel(level = logging.INFO)
    handler = logging.FileHandler(logfile,mode='w')
    handler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    
    def get_day(day_str=time.strftime('%Y-%m-%d'),day_offset=0):
        day_str=day_str.replace('-','').replace('/','')
        v_cur_day=datetime.datetime.strptime(day_str,'%Y%m%d')
        v_day=v_cur_day+datetime.timedelta(days=day_offset)
        return v_day.strftime('%Y-%m-%d')
    
    cur_day=get_day()
    pre_day=get_day(day_offset=-1)
    
    logger.info("开始执行...")
    
    
    
    from ftplib import FTP
    
    
    IP="192.168.6.149"
    user="ftp"
    password="1111"
    
    
    ftp=FTP()
    #ftp.set_debuglevel(2)
    ftp.connect(IP)
    
    ftp.login(user,password)
    
    #print ftp.getwelcome()
    
    # 使用主动模式,只需开通访问服务端 20 和 21端口访问
    ftp.set_pasv(False)
    
    #upload
    #ftp.storbinary('STOR %s' %filename, open(path,'rb',8192))
    
    #download
    cur_day=get_day().replace('-','')
    pre_day=get_day(day_offset=-1).replace('-','')
    # 切换目录
    ftp_path=os.path.join('/share/FundFile/',pre_day)
    
    ftp.cwd(ftp_path)
    file_list = ftp.nlst()
    data = [ name for name in file_list ]
    CONST_BUFFER_SIZE=1024
    def download(ftp,filename):
      print(filename)
      with open(filename,'wb+') as fp:
        try:
          ftp.retrbinary("RETR%s"%filename,fp.write,CONST_BUFFER_SIZE)
          fp.flush()
        except :
          return False
        return True
    
    
    
    data_path=os.path.join('/tmp',cur_day.replace('-',''))
    
    if not os.path.exists(data_path):
        os.makedirs(data_path)
    
    os.chdir(data_path)
    
    for f in data:
      download(ftp,f)
    
    print(data)
    #f = open(data_path)
    
    print('success')
    
    logger.info("结束执行.")
    


    异常问题

    报错:ftp.retrbinary  No such file or directory

    ftp.retrbinary("RETR%s"%filename,fp.write,CONST_BUFFER_SIZE)

    RETR与%s之间不能有空格。这问题好像是只出现在Serve-U 的FTP。linux下做的FTP没这问题。还要再验证一下

  • 相关阅读:
    WEB上传大文件解决方案
    上传大文件的解决方案
    网页文件断点上传
    超大文件上传方案(B/S)
    asp.net选择文件夹上传
    java文件断点上传
    超大文件上传方案(网页)
    web选择文件夹上传
    jsp选择文件夹上传
    jsp文件断点上传
  • 原文地址:https://www.cnblogs.com/bugbeta/p/13937654.html
Copyright © 2020-2023  润新知