• Python实现读取Excel文档中的配置并下载软件包


      问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢?

      分析:从这个问题入手,了解到:软件包在服务端是以zip文件形式存放,下载地址链接如:http://xiazai.autul.com/PS_CHANGCHENG/PS_CHANGCHENG_V8_91_CN.zip,每个产品的配置是存储在Excel文档中。

      OK,那么问题就是读取Excel文档,拼接成链接地址,访问每个地址下载包到指导路径。解压后就可以查看了。这么多包,该如何用Python程序实现下载呢?

           分析了下,这个地址是一些固定的,加一些可以从Excel文档中读取的变量来组合成的,那么这些地址我们就可以用一个函数来实现。下载后的文件,也可以用一个函数来实现。

      

          首先得需要用到读取Excel文档的模块:xlrd ,读取Excel文档;然后是os模块,判断存储路径;接着是用urllib模块,访问地址进行下载;中间用到了字符串拼接、数字取整、数字格式化输出、函数调用、忽略程序异常继续执行等。

      实现代码:

    import os
    import urllib.request
    import xlrd


    def url_arg(pacage,code_big,code_lit):
    url='http://xiazai.autul.com/'+str(pacage)+'/'+str(pacage)+'_V'+str(code_big)+'_'+str(code_lit)+'_CN.zip' #字符串拼接,注意传参要转化为str
    return url
    def url_file(pacage,code_big,code_lit):
    file_name=str(pacage)+'_V'+str(code_big)+'_'+str(code_lit)+'_CN.zip'
    return file_name
    def url_arg_big(pacage,code_big,code_lit):
    url='http://xiazai.autul.com/'+str(pacage)+'/'+str(pacage)+'_V'+str(code_big)+'_'+str(code_lit)+'_CN.ZIP' #字符串拼接,注意传参要转化为str,服务器上还有后缀为ZIP的包,大小写不一样,增加工作量啊
    return url
    def url_file_big(pacage,code_big,code_lit):
    file_name=str(pacage)+'_V'+str(code_big)+'_'+str(code_lit)+'_CN.ZIP'
    return file_name

    file_path='F:down1\' #下载包的保存地址,注意要有‘’

    try:
    if not os.path.exists(file_path):
    os.makedirs(file_path) # 如果没有这个path则直接创建

    workbook = xlrd.open_workbook(r'F:downH6_CN.xls')
    sheet2_name = workbook.sheet_names()[1] # 获取第2个工作表名称
    sheet2 = workbook.sheet_by_name(sheet2_name) # 获取第2个工作表内容
    rownum = sheet2.nrows #工作表的行数

    for i in range(rownum):
    cells = sheet2.row_values(i) #获取每一行的内容
    pacagename =cells[0]
    code_big = round(cells[2])
    code_lit = round(cells[3]*100) # 获取表格中的第1列,第3列,第4列 ,函数用round,不能int向下取整,十进制和二进制的区别
    if code_lit<10: #当小数部分第一位未0时,需要补0
    code_lit= "%02d"%code_lit #zfill函数用于字符串前面补0,数字用格式化前面补0
    urldown = url_arg(pacagename,code_big,code_lit)
    urldownbig=url_arg_big(pacagename,code_big,code_lit)
    print(urldown)
    file_result = url_file(pacagename,code_big,code_lit)
    file_addr = '{}{}'.format(file_path,file_result) # 拼接文件名。
    file_resultbig = url_file_big(pacagename, code_big, code_lit)
    file_addrbig= '{}{}'.format(file_path,file_resultbig)
    try:
    urllib.request.urlretrieve(urldown,filename=file_addr) # 利用urllib.request.urltrieve方法下载软件包
    except IOError as e:
    print(1, e)
    urllib.request.urlretrieve(urldownbig, filename=file_addrbig)
    except IOError as e:
    print(1, e)
    except Exception as e:
    print(2, e)
  • 相关阅读:
    Spring Bean的生命周期
    Java中的Object类
    Java线程池七个参数
    ROS 第五讲 在模拟器中构建第一个机器人
    ROS 第四讲 让小车在RViz与Gazebo模拟器中跑起来
    ROS 第三讲 操控小乌龟
    ROS 第二讲 基本操作
    ROS 第一讲 引入
    自然语言处理(二) 新词发现或非监督词典构建
    递归找到一个复杂对象中的某个值和它的最小层级
  • 原文地址:https://www.cnblogs.com/jintianniu/p/11752489.html
Copyright © 2020-2023  润新知