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

  分析:从这个问题入手,了解到:软件包在服务端是以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. Java泛型(1):概述

    通常而言,我们使用一种容器来存储一种类型的对象.而泛型的主要目的之一就是用来指定这个容器要持有什么类型的对象.因此,与其使用Object,我们可以暂时不指定类型. 看下面3个例子: (1) 我们有时候 ...

  2. v-on可以监听多个方法吗?

    原文地址 v-on可以监听多个方法 <template> <div class="about"> <button @click="mycli ...

  3. 字符串——kmp

    目录 一.前言 二.思路 三.代码 一.前言 kmp算法是用于从文本串text的字串中,寻找含有的模板串pattern的数量/位置的算法. 例如,在文本串abcabcccabc中,模板串abc的数量有 ...

  4. nginx 代理 registry docker certificate is valid for k8s, not

    1.配置SSL证书及nginx反向代理docker registry 搭建私有CA,初始化CA环境,在/etc/pki/CA/下建立证书索引数据库文件index.txt和序列号文件serial,并为证 ...

  5. linux下nginx的学习

    安装参考菜鸟教程:https://www.runoob.com/linux/nginx-install-setup.html nginx文档官网: http://nginx.org nginx社区:h ...

  6. RTSP协议概况

    RTSP协议概况 简单的交互命令就能实现RTSP对接,C代表Client S代表Server 例如:C1-客户端发的第一个命令 S1-服务器响应的第一个回复 [C1]OPTIONS rtsp://10 ...

  7. 【转帖】Windows与Linux系统下的库介绍

    Windows与Linux系统下的库介绍 http://embeddedlinux.org.cn/emb-linux/entry-level/200903/12-553.html 库的定义 库文件是一 ...

  8. 网站循环加载监控-C#

    背景: 公司有一个报表的网站,服务器或系统不太稳定,导致客户有时候查看报表网址的时候网站打不开或者打开时间过长,影响用户体验 需求: 通过程序循环打开网址了解加载情况,使用谷歌浏览器内核.,程序开发不 ...

  9. spring-boot 几个工具类(七)

    环境 jdk 6 tomcat 6.0.53 sts 4.4.2 maven 3.2.5 mysql 5.7 SpringContextHolder SpringContextHolder 可以很方便 ...

  10. [Err] 1054 - Unknown error 1054

    [Err] 1054 - Unknown error 1054:很小的一个错误,缺耽误很长的时间,字段不匹配: 解决方法:一一对照字段,数据库字段要和类中的字段要对应,或者sql语句中使用的字段!仔细 ...