`
kanpiaoxue
  • 浏览: 1788892 次
  • 性别: 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计算机二级题库(附带答案)

    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语言基本概念的掌握,包括基本语法规则、程序安装及第三方库应用等。这些...

    计算机二级 NCRE2 Python 练习题 .zip

    计算机二级 NCRE2 Python 练习题 .zip 计算机二级 NCRE2 Python 练习题 .zip 计算机二级 NCRE2 Python 练习题 .zip 计算机二级 NCRE2 Python 练习题 .zip 计算机二级 NCRE2 Python 练习题 .zip 计算机二级 NCRE2 ...

    50道Python面试题集锦(附答案).pdf

    1. Python面试题集锦:这份文件是一个包含50道Python相关面试题目的集合,并附有答案。它针对的是秋招季,也就是秋季校园招聘季,可能对即将毕业的大学生或者需要转行的技术人员很有帮助。 2. 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的自动问答系统.zip

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

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

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

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

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

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

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

    python基础练习题100道.zip

    python基础练习题100道

    Python面试选择题题库

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

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

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

    Python期末试题题库完整.pdf

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

Global site tag (gtag.js) - Google Analytics