`
kanpiaoxue
  • 浏览: 1782210 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

python FAQ 问答题集锦(二)

 
阅读更多

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、

分享到:
评论

相关推荐

    Python项目开发案例集锦.rar

    Python项目开发案例集锦.rar

    python计算机二级题库(附带答案)

    python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python计算机二级题库(附带答案)python...

    python项目开发案例集锦_python

    python项目各个案例,并且有非常详细的说明以及步骤,适合于新手以及编程经验不高的人。容易入门,容易看懂。

    python案例集锦pdf文件.zip

    2. 文件操作:Python提供了强大的文件操作功能,包括读写文件、处理文本和二进制数据。学习者应掌握如何打开、关闭文件,以及使用read、write、append等方法。 3. 模块与库:Python有丰富的标准库和第三方库。如...

    第14届蓝桥杯Python省赛真题-大学B组

    第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛真题-大学B组 第14届蓝桥杯Python省赛...

    智能问答系统python实现

    基于知识图谱的智能问答系统python实现(复旦大学论文基于qa语料和知识库的问答系统)_python 智能问答,python 智能问答系统-机器学习代码类资源本代码实现是基于python实现的基于复旦大学崔万云博士的learing ...

    Python经典面试题集锦 Python练习题 Python考试题目整理汇总 共18页.pdf

    这份"Python经典面试题集锦"包含了18页的Python练习题和考试题目,旨在帮助学习者和求职者熟悉Python的核心概念和技术。 1. **单例模式**:在软件设计模式中,单例模式确保一个类只有一个实例,并提供一个全局访问...

    Python企业面试题集锦(附答案)

    Python企业面试题集锦涵盖了从基础到进阶的多个知识点,这些知识点对于理解Python的核心特性和实际应用至关重要。以下是对一些重要问题的详细解析: 1. **为什么学习Python**: Python是一种高级编程语言,其易读...

    计算机二级python真题题库(题目+答案)电子版笔记2

    计算机二级Python考试的题型主要分为两大类:单选题和操作题。单选题主要测试考生对于计算机基础知识、数据结构与算法的理解,以及对Python语言基本概念的掌握,包括基本语法规则、程序安装及第三方库应用等。这些...

    全国计算机等级考试二级Python真题及解析

    全国计算机等级考试二级Python真题及解析 全国计算机等级考试二级(以下简称“二级考试”)是对计算机基础知识和编程能力的考查,旨在评估考生的计算机水平。以下是二级考试Python部分的真题及解析,涵盖了变量、...

    基于知识图谱的智能问答系统python实现-python智能问答,python智能问答系统

    基于知识图谱的智能问答系统python实现__python智能问答,python智能问答系统基于知识图谱的智能问答系统python实现__python智能问答,python智能问答系统基于知识图谱的智能问答系统python实现__python智能问答,...

    基于python的自动问答系统.zip

    【标题】:“基于Python的自动问答系统” 在IT领域,自动问答系统是一种人工智能技术,它旨在模拟人类对话,为用户提供准确、快速的问题解答。在这个项目中,“基于Python的自动问答系统”显然使用了Python编程语言...

    (完整版)Python期末复习题(必考)

    单选题 1.在 Python中,合法的标识符是【 C. it s D. str 2. Python表达式中,可以使用【 】控制运算的优先顺序。 A.圆括号( B.方括号[门 C.花括号D.尖括号〈 3.以下 Python注释代码,不正确的是【 A.# Python注释代码 ...

    Python企业面试题集锦(附答案)完整版PDF最新版本

    Python是一种解释型编程语言,其代码在执行时逐行解释并运行,这一特性使得调试过程变得简便,从而提高了开发效率。Python的设计哲学强调自由、优雅、明确和简洁,这使得它在多个领域都有所建树。它拥有强大的第三方...

    Python聊天机器人,智能问答系统.zip

    Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python聊天机器人,智能问答系统 Python...

    第十章Python列表习题及答案--中文

    Python列表习题及答案--中文 Python列表是Python中的一种基本数据结构,用于存储多个数据元素的集合。列表可以包含不同类型的数据元素,如数字、字符串、列表等。Python列表习题及答案--中文章节涵盖了Python列表的...

    Python面试选择题题库

    自己整理一些大厂的面试题题库,都是一些常见的题目,希望能给大家提供帮助,题库分为3个部分这是第二部分

    中小学数学题程序_instance62k_python题_Python解数学题_Python解奥数题_python解初中题_

    在Python编程领域,解决中小学数学题,包括奥数题和初中数学题,是一种常见的实践,旨在提高编程技能和逻辑思维能力。"instance62k_python题"可能指的是一个包含62000个数学问题的实例集合,这些题目涵盖了从小学到...

    Python期末试题题库完整.pdf

    &是两个数字按二进制位作与运算的操作符;在 Python 中,序列类型包括字符串、列表、元组、字典等;Python语言的单行注释使用“#”,多行注释使用三引号“"""或'''」。 在 Python 中,使用 round 函数可以对数字...

    python 医药问答系统

    Python医药问答系统是一种基于Python开发的应用程序,它利用知识图谱技术来构建和管理医疗领域的专业知识库,从而实现对用户提出的医药相关问题进行智能解答。这个系统的核心在于理解和解析问题,检索相关知识,以及...

Global site tag (gtag.js) - Google Analytics