python实现文件下载功能(Linux+Windows本地)

python实现文件下载功能(Linux+Windows本地)

一、前提介绍

  我的日常工作中,有一项固定的工作内容,就是需要从不同的服务器上将各个应用系统的数据库备份拉到本地。由于此项工作太过于机械化,占用时间较多,在经历了一段时间的折磨之后,我就开始尝试使用脚本来完成这项工作。
  我的备份介质存在比较严重的日期依赖,例如正常情况,T日备份T-1的备份文件,但是当T日为星期一时,有的需要拉上周五至上周日的数据,有的只需要拉上周五的数据等,遇到节假日就更麻烦了。原本考虑使用bat脚本实现,后来分析了一下,觉得可行性太低,决定采用python来实现。
  开始的时候,由于服务器环境比较老,并且是生产的内网环境,我不想去折腾一个新的环境,所以我想直接使用服务器本身的环境,Windows+python2.7+pscp来完成,做完之后发现拷贝数据太慢,1M下载速度不到,无奈才使用python的paramiko模块进行优化。

二、代码实现

实现目标:

①方便维护
②从远程拷贝备份介质到本地;
②拷贝备份介质的日期为上一工作日至当日;
③自动生成本地路径文件夹,文件夹所含的日期为下个月第一个工作日
以上,经过简单分析之后,第一,我需要将所有需要配置的数据写进配置文件,第二,解决日期问题,第三,解决路径问题

2.1配置文件

2.1.1日常维护

  首先为了保证以后的维护问题,将往后需要修改数据的部分配置在单独的文件中,我配置的数据有holiday_list(节假日)、linux_address(远程路径)、windows_address(本地路径)、file_name(模糊文件名)、file_extension(文件后缀)。配置的数据使用列表存储,方便遍历套接形成远程路径和本地路径。

2.1.2日期问题

  (1)需要获取上一工作日至当日的所有日期

# 获取日期列表(上一工作日至系统日期)----------------------------------------------
def get_date_list():
    date_list = []
    today = datetime.datetime.today().strftime("%Y%m%d")
    today_date = datetime.datetime.strptime(today, "%Y%m%d")
    last_day_get = get_last_work_day()
    last_day_date = datetime.datetime.strptime(last_day_get, "%Y%m%d")
    while today_date >= last_day_date:
        last_day = last_day_date.strftime("%Y%m%d")
        date_list.append(last_day)
        last_day_date += datetime.timedelta(days=1)
    return date_list


# 获取today最近一个工作日--------------------------------------------------------
def get_last_work_day():
    i = 1
    # 前一自然日
    last_day = datetime.date(datetime.datetime.today().year, datetime.datetime.today().month,
                             datetime.datetime.today().day) - datetime.timedelta(i)
    # 前一自然日的星期数
    calendar_march = calendar.weekday(last_day.year, last_day.month, last_day.day)
    # 格式化日期
    last_day_to_str = last_day.strftime("%Y%m%d")

    while last_day_to_str in holiday_list or calendar_march in range(5, 7):
        i += 1
        last_day = datetime.date(datetime.datetime.today().year, datetime.datetime.today().month,
                                 datetime.datetime.today().day) - datetime.timedelta(i)
        # 前一自然日的星期数
        calendar_march = calendar.weekday(last_day.year, last_day.month, last_day.day)
        # 格式化日期
        last_day_to_str = last_day.strftime("%Y%m%d")

    
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李笔记

加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值