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

  分析:从这个问题入手,了解到:软件包在服务端是以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:\down\H6_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)

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. CentOS 7 最小化安装后的注意事项

    http://blog.csdn.net/f_srion/article/details/54910943 在VM虚拟机中安装CentOS 7 时 有时候顾虑到电脑硬件性能,我们需要最小化安装,而最小 ...

  2. 小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战

    笔记 6.服务注册和发现之Eureka Client搭建商品服务实战     简介:搭建用商品服务,并将服务注册到注册中心 1.创建一个SpirngBoot应用,增加服务注册和发现依赖     2.模 ...

  3. 由DBCursor的“can't switch cursor access methods”异常引发的思考

    先谈谈我是怎么用的: DBCollection dbcollection = XXXXXXXXXX(); //连接mongo DBCursor dbCursor = mergeVideoDB.find ...

  4. SAP JCO3配置

    windows 环境设置 1.sapjco3.dll 需要与 sapjco3.jar 在同一目录 2.设置系统环境变量,将sapjco3所在目录加入系统环境变量 例如: 新建环境变量 变量名: JAV ...

  5. wdScrollTab

    wdScrollTab是一个采用jQuery实现的Tab面板,当标签太多超出页面时会自动滚动.支持iframe.ajax调用和动态加载内容.

  6. 树莓派实现摄像头监控(使用motion和mjpg-streamer)

    购买raspBerryCarmen,大概20元, 启动树莓派,安装: `sudo apt install motion` 配置/etc/motion/motion.conf, `sudo vim /e ...

  7. Java 连接Access

    Java 连接Access 第一次使用连接Access数据库, 记录一下遇到的坑 Access驱动下载地址 http://pan.baidu.com/s/1o8ltTfc 不使用WINDOW的建立数据 ...

  8. RocketMQ之八:水平扩展及负载均衡详解

    RocketMQ是一个分布式具有高度可扩展性的消息中间件.本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的. NameServer集群 提供轻量级的服务发现和路由.每个 ...

  9. 浏览器F12功能键对测试工程师的重要性

    F键,功能键,Function键.F12常用于网站界面测试.调试,分析网页所出现的问题,查看html元素.查看响应事件等方面. 打开一个网页,点击F12,弹出一个窗口,其窗口的功能如下: 1 Elem ...

  10. 【CodeForces - 682C】Alyona and the Tree(dfs)

    Alyona and the Tree Descriptions 小灵决定节食,于是去森林里摘了些苹果.在那里,她意外地发现了一棵神奇的有根树,它的根在节点 1 上,每个节点和每条边上都有一个数字. ...