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

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

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

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

  

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

  实现代码:

  1. import os
    import urllib.request
    import xlrd
  2.  
  3. 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
  4.  
  5. file_path='F:\down1\\' #下载包的保存地址,注意要有‘\’
  6.  
  7. try:
    if not os.path.exists(file_path):
    os.makedirs(file_path) # 如果没有这个path则直接创建
  8.  
  9. workbook = xlrd.open_workbook(r'F:\down\H6_CN.xls')
    sheet2_name = workbook.sheet_names()[1] # 获取第2个工作表名称
    sheet2 = workbook.sheet_by_name(sheet2_name) # 获取第2个工作表内容
    rownum = sheet2.nrows #工作表的行数
  10.  
  11. 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)

Python实现读取Excel文档中的配置并下载软件包的更多相关文章

  1. POI 读取Excel文档中的数据——兼容Excel2003和Excel2007

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. HSSF - 提供读写Microsoft Exce ...

  2. 按照excel文档中的内容在当前cad图纸中自动排布实体

    本例实现的主要功能是读取excel文档中的内容,其次是将按照读取的信息在当前cad图纸中添加相应的实体.下面先介绍实现代码: CString excelPath; //外部excel文档的地址 Upd ...

  3. Python openpyxl : Excel 文档简单操作

    安装方法 使用 pip 或通过专门python IDE(如pyCharm)进行安装 其中pip安装方法,命令行输入:  pip install openpyxl 基本使用 第一步先是要导入 openp ...

  4. PHP读取excel文档

    PHP读取excel文档 项目需要读取Excel的内容,从百度搜索了下,主要有两个选择,第一个是PHPExcelReader,另外一个是PHPExcel.   PHPExcelReader比较轻量级, ...

  5. C#操作Excel(2)-- 打开-读取Excel文档

    由于要为某软件实现导出Excel功能,故有此文. 本文的开发环境是Visual Studio 2010 ,C#, Excel 2007. 新建C#工程后打开Solution Explorer,可以看到 ...

  6. 读取EXCEL文档解析工具类

    package test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException ...

  7. 2018-10-04 [日常]用Python读取word文档中的表格并比较

    最近想对某些word文档(docx)的表格内容作比较, 于是找了一下相关工具. 参考Automate the Boring Stuff with Python中的word部分, 试用了python-d ...

  8. 【转】ExcelHelper类,用npoi读取Excel文档

    //------------------------------------------------------------------------------------- // All Right ...

  9. Java使用poi包读取Excel文档

    项目需要解析Excel文档获取数据,就在网上找了一些资料,结合自己这次使用,写下心得: 1.maven项目需加入如下依赖: <dependency> <groupId>org. ...

随机推荐

  1. HBase管理与监控——彻底删除HBase数据

    1.hadoop的bin目录下,执行命令以下命令清除Hbase数据 hadoop fs -rm -r /hbase 2.连接ZK,执行以下命令清除Hbase数据 rmr /hbase 3.重启ZK.重 ...

  2. Markov logic network

    A Markov logic network (or MLN) is a probabilistic logic which applies the ideas of a Markov network ...

  3. python 读取文件夹中所有同类型的文件 并用pandas合并

    import globimport osimport pandas as pd read_path = 'D:/Data' # 要读取的文件夹的地址read_excel = glob.glob(os. ...

  4. 架构模式: Saga

    架构模式: Saga 上下文 您已应用每服务数据库模式.每个服务都有自己的数据库.但是,某些业务事务跨越多个服务,因此您需要一种机制来确保服务之间的数据一致性.例如,假设您正在建立一个客户有信用额度的 ...

  5. docker 启动镜像报 WARNING: IPv4 forwarding is disabled. Networking will not work.

    centos7 解决办法: # vi /etc/sysctl.conf 添加如下代码:     net.ipv4.ip_forward=1 重启network服务 # systemctl restar ...

  6. 【AMAD】django-social-auth -- 让django使用社交网络oauth鉴权变得极为轻松!

    简介 个人评分 简介 django-social-auth1集成的Oauth API包括: Google OpenID Google Oauth Google Oauth2 Yahoo OpenID ...

  7. 如何写出优雅耐看的JavaScript代码

    参考链接:https://segmentfault.com/a/1190000020444918?utm_medium=hao.caibaojian.com&utm_source=hao.ca ...

  8. elasticsearch 7.1 401 Unauthorized

    1.执行curl -XGET 'localhost:9200/_cat/indices?v&pretty'  报401 2.修改配置xpack.security.enabled: false ...

  9. linux文件权限更改命令chmod及数字权限实践总结

     改变权限属性命令chmod chmod 是用来改变文件或目录权限的命令,但只有文件的属主和超级用户root才有这种权限.通过chmod来改变文件或目录的权限有两种方法:一种是通过权限字母和操作符表达 ...

  10. gitlab本地部署方法(ubuntu16.04+gitlab9.5.5)

    Gitlab本地部署方法   1 前期准备 电脑配置:windows7 ,内存8GB以上(因为有4GB左右要分配给虚拟机中的ubuntu) 虚拟机:VMware Linux系统:ubuntu16.04 ...