- 浏览: 1782210 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (723)
- IE 国际化 (1)
- java (310)
- python (52)
- Spring (101)
- eclipse (43)
- birt (10)
- exe4j (1)
- ActiveMQ (3)
- HornetQ (7)
- Ext (16)
- Linux (50)
- james (1)
- mail (3)
- 经验 (288)
- tomcat (5)
- Netty (3)
- ant (6)
- rsync (2)
- MD5 (3)
- 正则表达式 (3)
- 非技术 (59)
- mysql (28)
- sftp (1)
- Commons (2)
- oracle (3)
- vsftp (1)
- jdoc (1)
- socket (3)
- SEDA (2)
- UUID (1)
- quartz (7)
- javascript (50)
- sql (5)
- array (3)
- POI (3)
- redis (2)
- junit (4)
- 二维码 (1)
- jdk (8)
- h2 (6)
- maven (37)
- JVM (5)
- html (4)
- css (1)
- excel (4)
- myeclipse (2)
- scala (0)
- jQuery (5)
- log (10)
- slf4j (2)
- log4j (9)
- REST (15)
- guava (18)
- Joda-Time (7)
- ini4j (1)
- 配置文件 (2)
- lucene (1)
- database (3)
- curator (2)
- zookeeper (3)
- 并发 (2)
- jetty (6)
- ehcache (5)
- windows (1)
- protobuf (1)
- select2 (2)
- easyui (10)
- Freemarker (1)
- Filter (1)
- twisted (1)
- DateTime (11)
- mockrunner (1)
- DataSource (4)
- ajax (1)
- shell (18)
- powermockito (5)
- json (5)
- lombok (1)
- jointjs (1)
- cookie (1)
- mybatis (11)
- 加密解密 (2)
- 安全 (2)
- web (1)
- notepad++ (3)
- mac (48)
- sublime (14)
- git (7)
- docker (10)
- jar (1)
- gson (5)
- ubuntu (3)
- 模式 (1)
- neo4j (2)
- elasticsearch (1)
- OmniGranffle (1)
- ASCII (1)
- jdbc (3)
- kafka (1)
- MQ (1)
- chrome (3)
- 华为 (1)
- 路由器 (1)
- api (2)
- 架构 (1)
- 设计模式 (1)
- pip (4)
- springboot (48)
- 数据库 (4)
- thread (1)
- java.thread (1)
- sqlite (1)
- postman (1)
- springboot-actuator (2)
- jwt (1)
- token (1)
- brew (9)
- vim (1)
- virtualbox (1)
- Swagger (1)
- spring-retry (3)
- 调度 (1)
- item2 (5)
- graph (12)
- jgrapht (12)
- tuple (1)
- hadoop (5)
- curl (1)
- 算法 (3)
- Jekyll (1)
- github (1)
- ssh-keygen (1)
- zip (2)
- http (2)
- RestTemplate (8)
- 文件处理 (2)
- XStream (1)
- XML (3)
- JAXB (1)
- 笛卡尔积 (2)
- hive (1)
- 搜狗输入法 (1)
- 常用java类 (2)
- nginx (1)
- log4j2 (1)
- drawio (2)
- 安卓 (1)
- 小米 (1)
- okhttp (1)
- requests (1)
- 格式化 (2)
- MySQL Workbench (1)
- 分布式 (1)
- zip4j (1)
- hbase (5)
- hikari (1)
- javers (1)
- pydatetime (4)
- pyassert (1)
- pylog (2)
- tree (2)
- download (1)
- zeppelin (1)
- utils (2)
- wget (1)
- 鼠标 (1)
- 位运算 (2)
- open api (1)
- 域名 (1)
最新评论
-
youngcoder:
haohaohao~
Spring cache 注解功能不起作用的解决方案 -
kanpiaoxue:
lixz 写道有具体实例demo吗好多年前写的了。你还是去官网 ...
spring batch(一):基础部分 -
lixz:
有具体实例demo吗
spring batch(一):基础部分 -
BuDongOrz:
...
Spring MVC controller 读取配置文件 -
hvang1988:
理解错了,原来还是计数,不是时间
spring batch(二):核心部分(1):配置Spring batch
1、python 操作excel
excel是人们日常惯用的电子文档格式,所以python对excel的操作显得格外重要。
用到python的excel库 xlutils,
资源地址:http://www.python-excel.org/
例子:
公司对游戏内数据的销售物品的汇率进行上传操作,每次上传之前需要对数据的格式进行验证。上传的文件就是excel。
该excel共6个列,具体格式如下:
格式描述:游戏ID + 物品ID + 物品名称 + 物品单价 + 物品有效期 + 物品类型
对格式的要求:
a、保证每一行,必须有6列数据
b、游戏ID + 物品ID 组成数据的主键,所以不允许 游戏ID + 物品ID 出现重复的情况
c、游戏ID , 物品ID,必须是数字
d、物品单价,必须是合法的数字
代码如下:
class OverseaRate(object): ''' 海外游戏,物品数据汇率上传excel文件格式检查 ''' ''' 2002 24748 灿烂绚羽装护腕 0 -1 暂无 2002 561 条纹小礼服腕 0 -1 暂无 2002 3955 精灵裙鞋子 0 -1 暂无 2002 4259 晚礼服鞋 0 -1 暂无 2002 4261 绣花鞋 0 -1 暂无 2002 4273 蝴蝶裙鞋子 0 -1 暂无 ''' INIT_PATTERN = '^\d+$' PRICE_PATTERN = '^\d+(\.\d+)?$' VALID_LENGTH = 6 def __init__(self, excelFile): self.excelFile = excelFile def checkOverseaRate(self): rs = self.getDatas() flag = self.checkPrimaryKey(rs) if flag: if self.checkFormat(rs): print '检查完成,数据没有异常,可以上传' def checkFormat(self, rs): initProg = re.compile(self.INIT_PATTERN) priceProg = re.compile(self.PRICE_PATTERN) rowNum = 0 flag = True for row in rs: rowNum += 1 gameId = self.dealFloatNum(row[0]) itemId = self.dealFloatNum(row[1]) price = self.dealFloatNum(row[3]) gameIdMatch = initProg.match(gameId) itemIdMatch = initProg.match(itemId) priceMatch = priceProg.match(price) if not self.match(gameIdMatch): self.getErrorMsg('游戏ID', rowNum, gameId) flag = False if not self.match(itemIdMatch): self.getErrorMsg('物品ID', rowNum, itemId) flag = False if not self.match(priceMatch): self.getErrorMsg('物品单价', rowNum, price) flag = False return flag def getErrorMsg(self, msg, rowNum, row): print 'Error:' + msg + ',数据格式不正确!\t行数:', rowNum, ',错误数据内容:', row def match(self, m): return True if m else False def dealFloatNum(self, row): return row[0:-2:] if row.endswith('.0') else row def checkPrimaryKey(self, rs): s = Set() rowNum = 0; flag = True for row in rs: rowNum += 1 length = len(row) if self.VALID_LENGTH != length: tmp = abs(self.VALID_LENGTH - length) self.getErrorMsg('数据条目相差了' + str(tmp) + '列数据', rowNum, row) flag = False continue val = row[0], row[1] if val not in s: s.add(val) else: flag = False print 'Error:数据重复!行数:', rowNum, '重复数据:', val return flag def getDatas(self): wb = open_workbook(self.excelFile) s = wb.sheets()[0] rs = [] for row in range(s.nrows): values = [] for col in range(s.ncols): val = s.cell(row, col).value values.append(str(val)) rs.append(values) return rs
2、远程文件MD5校验
描述:远程服务器上面有很多的 .zip 包,是一次性部署到远程服务器上面的。为了保证数据的完整性和一致性,需要对这些 .zip包进行 MD5 校验。如果有MD5不一致的,就需要进行再次部署新的文件,直到MD5一致。
给定一个ip列表的 .txt文件,对这个文件中的所以IP进行扫描,分别到这些服务器的固定目录下载 .zip文件到本地目录,然后对这些本地的文件进行MD5校验。
patchIP.txt
127.0.0.1 127.0.0.2 127.0.0.3 127.0.0.4 127.0.0.5 127.0.0.6 127.0.0.7
python的代码如下:
class CheckMd5(object): def __init__(self, ipFile): self.ipFile = ipFile self.tmpUrl = r'D:\tmp' self.srcName = 'newupdateinfo.zip' def createTmpFolder(self, filePath): if not os.path.isdir(filePath): print 'start to create folder: ', filePath os.mkdir(filePath) def clearFolder(self, filePath): print 'start to clear ', filePath for root, dirs, fileNames in os.walk(filePath): for fileName in fileNames: tmpPath = os.path.join(root, fileName) os.remove(tmpPath) def downZips(self): self.createTmpFolder(self.tmpUrl) self.clearFolder(self.tmpUrl) count = 0 for line in open(self.ipFile): line = line.strip() source = 'http://' + line + '/sgsj/' + self.srcName print 'start to wget [' + source + ']' cmd = r'"D:\Program Files (x86)\GnuWin32\bin\wget" --directory-prefix=' + self.tmpUrl + ' ' + source subprocess.Popen(cmd, shell=True).wait() self.changeZipName(line) count += 1 print 'count: ', count, ',\tip:', line, 'is over' def changeZipName(self, line): print '-------- start to rename -------' old = os.path.join(self.tmpUrl, self.srcName) new = os.path.join(self.tmpUrl, line + '.zip') os.rename(old, new) print 'old', old print 'new', new print '-------- finished renaming -----' def createMd5List(self): md5Set = Set() for root, dirs, fileNames in os.walk(self.tmpUrl): for fileName in fileNames: filePath = os.path.join(root, fileName) md5Str = self.createFileMd5(filePath) print '%.500s\t:\t%s' % (filePath, md5Str if md5Str in md5Set else '\t-->\t' + md5Str) md5Set.add(md5Str) print '*' * 10, ' md5 result start ', '*' * 10 if 1 == len(md5Set): print 'check finished: all md5 is the same one. [Successfully!]' else: print 'Error: found different md5 in result. Please check it. [Failure!]' print '*' * 11, ' md5 result end ', '*' * 11 def createFileMd5(self, filePath): ''' 文件生成MD5码,不行用二进制流的形式open(f,'rb')读出数据,对它进行操作。 如果按照f.readlines()读取,那么文件无法保留原有的格式,造成MD5生成不一致。 ''' m = hashlib.md5() with open(filePath, 'rb') as f:#必须用二进制格式读取 'rb' b = f.read(1024) while b != b'': m.update(b) b = f.read(1024) #m.update(f.read()) # 可以采用这种形式,对于大于1024字节的文件效率不高,这里尝试每次读取 1024 字节 return m.hexdigest().upper() if __name__ == '__main__': checkMd5 = CheckMd5(r'E:\python_workspace\learningPython\src\sgcqip.txt') checkMd5.downZips() checkMd5.createMd5List()
上面下载文件到本地,用到了一个 wget的工具,该工具模仿Linux下面的 wget ,下载地址: http://gnuwin32.sourceforge.net/packages/wget.htm
3、
4、
5、
发表评论
-
域名解析网址
2021-03-25 11:30 998很多网址由于地址被挂载了钩子而无法被正常访问,可以通过 ... -
swagger生成javaAPI的server&client代码
2021-03-25 11:05 959文章原文: 《Spring Boot: API ... -
springboot 返回JSON日期格式问题
2021-03-24 16:36 1113springboot返回的时间格式,根据版本的不同,可能返回 ... -
在其他项目中如何依赖一个springboot的jar?
2021-03-17 16:08 638资料:How to add a dependency ... -
指定java stream中并行处理的线程池大小
2021-03-04 11:38 1610Java8实战:并行线程池 写道 并行流内部使用了默认的F ... -
Can we disable the default web server in the Spring Boot application?
2021-02-22 11:07 283The major strong point in S ... -
Java 8 Comparator: How to Sort a List
2021-02-22 10:54 348文章地址: https://dzone.com/art ... -
Java Getter and Setter: Basics, Common Mistakes, and Best Practices
2021-02-22 10:19 520文章地址: https://dzone.com/ar ... -
Java String Format Examples
2021-02-22 10:14 321参考资料地址: 文章地址: https://dzo ... -
位运算&位掩码示例(权限)
2021-02-10 14:26 467参考资料地址: 1、https://juejin. ... -
docker容器在系统启动的时候自动启动
2021-02-09 17:53 409Yes, docker has restart pol ... -
excel高亮选择的行和列
2021-02-09 16:35 402【开始】 - 【条件格式】- 【管理规则】- 新 ... -
Java 位移运算符
2021-02-08 16:21 424参考文章: 1、【 ... -
确定 Mac 笔记本电脑的电池循环计数
2021-02-07 19:05 1197《确定 Mac 笔记本电脑的电池循环计数》来做官网。 ... -
逻辑M720鼠标的按键设置
2021-02-05 00:34 26351、滚轮之后的那个按键:M720的滚轮后方有一个开关, ... -
macbook pro怎么取消开盖自动开机?
2021-02-04 23:21 1306关闭掀盖自动开机命令: sudo nvram Auto ... -
java中tree的应用示例:javax.swing.tree.DefaultMutableTreeNode
2021-02-03 15:03 503package org.kanpiaoxue. ... -
数据分页逻辑
2021-01-20 17:48 320//当前页 int intPage = I ... -
eclipse导入导出Snippets
2021-01-20 10:45 378导出: Display the snippets v ... -
eclipse迁移配置、插件(导出/导入快捷键、代码风格等等)
2021-01-20 10:28 791有的时候需要从一个eclipse导出它的所有配置,比如 ...
相关推荐
Python项目开发案例集锦.rar
python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python...
python项目各个案例,并且有非常详细的说明以及步骤,适合于新手以及编程经验不高的人。容易入门,容易看懂。
2. 文件操作:Python提供了强大的文件操作功能,包括读写文件、处理文本和二进制数据。学习者应掌握如何打开、关闭文件,以及使用read、write、append等方法。 3. 模块与库:Python有丰富的标准库和第三方库。如...
第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛...
基于知识图谱的智能问答系统python实现(复旦大学论文基于qa语料和知识库的问答系统)_python 智能问答,python 智能问答系统-机器学习代码类资源本代码实现是基于python实现的基于复旦大学崔万云博士的learing ...
这份"Python经典面试题集锦"包含了18页的Python练习题和考试题目,旨在帮助学习者和求职者熟悉Python的核心概念和技术。 1. **单例模式**:在软件设计模式中,单例模式确保一个类只有一个实例,并提供一个全局访问...
Python企业面试题集锦涵盖了从基础到进阶的多个知识点,这些知识点对于理解Python的核心特性和实际应用至关重要。以下是对一些重要问题的详细解析: 1. **为什么学习Python**: Python是一种高级编程语言,其易读...
计算机二级Python考试的题型主要分为两大类:单选题和操作题。单选题主要测试考生对于计算机基础知识、数据结构与算法的理解,以及对Python语言基本概念的掌握,包括基本语法规则、程序安装及第三方库应用等。这些...
全国计算机等级考试二级Python真题及解析 全国计算机等级考试二级(以下简称“二级考试”)是对计算机基础知识和编程能力的考查,旨在评估考生的计算机水平。以下是二级考试Python部分的真题及解析,涵盖了变量、...
基于知识图谱的智能问答系统python实现__python智能问答,python智能问答系统基于知识图谱的智能问答系统python实现__python智能问答,python智能问答系统基于知识图谱的智能问答系统python实现__python智能问答,...
【标题】:“基于Python的自动问答系统” 在IT领域,自动问答系统是一种人工智能技术,它旨在模拟人类对话,为用户提供准确、快速的问题解答。在这个项目中,“基于Python的自动问答系统”显然使用了Python编程语言...
单选题 1.在 Python中,合法的标识符是【 C. it s D. str 2. Python表达式中,可以使用【 】控制运算的优先顺序。 A.圆括号( B.方括号[门 C.花括号D.尖括号〈 3.以下 Python注释代码,不正确的是【 A.# Python注释代码 ...
Python是一种解释型编程语言,其代码在执行时逐行解释并运行,这一特性使得调试过程变得简便,从而提高了开发效率。Python的设计哲学强调自由、优雅、明确和简洁,这使得它在多个领域都有所建树。它拥有强大的第三方...
Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python...
Python列表习题及答案--中文 Python列表是Python中的一种基本数据结构,用于存储多个数据元素的集合。列表可以包含不同类型的数据元素,如数字、字符串、列表等。Python列表习题及答案--中文章节涵盖了Python列表的...
自己整理一些大厂的面试题题库,都是一些常见的题目,希望能给大家提供帮助,题库分为3个部分这是第二部分
在Python编程领域,解决中小学数学题,包括奥数题和初中数学题,是一种常见的实践,旨在提高编程技能和逻辑思维能力。"instance62k_python题"可能指的是一个包含62000个数学问题的实例集合,这些题目涵盖了从小学到...
&是两个数字按二进制位作与运算的操作符;在 Python 中,序列类型包括字符串、列表、元组、字典等;Python语言的单行注释使用“#”,多行注释使用三引号“"""或'''」。 在 Python 中,使用 round 函数可以对数字...
Python医药问答系统是一种基于Python开发的应用程序,它利用知识图谱技术来构建和管理医疗领域的专业知识库,从而实现对用户提出的医药相关问题进行智能解答。这个系统的核心在于理解和解析问题,检索相关知识,以及...