设为首页 收藏本站
查看: 1091|回复: 0

[经验分享] 应用Python解决报表日常对数问题

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-8 09:06:13 | 显示全部楼层 |阅读模式
一、准备工作
1). 安装python,installed version:2.7.9 in Window.

2). 安装pip(可选)

QQ截图20150408090603.png
3). excel文档规范化
4). 安装xlrd
什么是xlrd? xlrd是python中专门用于抽取Microsoft Excel表格数据的库。xlrd v0.9.3, 下载地址:https://pypi.python.org/pypi/xlrd
安装步骤:下载tar.gz,并解压到目录:xlrd\xlrd-0.9.3.tar\xlrd-0.9.3,然后转到该目录下,执行:python setup.py install

二、编写脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# -*- coding: cp936 -*-
import xlrd
class DataComparison():
    compare_result  = ''
    f_dir           = r''
    datasrc         = ''
    datadst         = ''
    f1              = ''
    f2              = ''
    col_sets_sheet1 = []
    col_sets_sheet2 = []
    f1_sheet_index  = 0
    f2_sheet_index  = 0
    if_with_title   = '1'
     
     
    def __init__(self, dataList):
        ############### Set Parameters #############
        compare_result = dataList[0]
         
        datasrc = dataList[1]
        datadst = dataList[2]
         
        # Read the 2 excel files to be compared.
        # Set data file name
        f1 = dataList[3]
        f2 = dataList[4]
        # Set col numbers in the 1st sheet
        col_sets_sheet1 = dataList[5] #
        col_sets_sheet2 = dataList[6] #
        # Set sheet in files to be compared.
        # The 1st sheet as default
        f1_sheet_index = dataList[7]
        f2_sheet_index = dataList[8]
        # Set if excel sheet has title(only 1st row as title)
        if_with_title = dataList[9]
        ############### Load Data & Compare #############
        print "Start Loading..."
        book1 = xlrd.open_workbook(f1)
        book2 = xlrd.open_workbook(f2)
        print "Loading Files OK!"
        b1sheet = book1.sheet_by_index(f1_sheet_index)
        b2sheet = book2.sheet_by_index(f2_sheet_index)
        print "Ranging Data"
        col_1_b1sheet = b1sheet.col_values(col_sets_sheet1[0])
        col_2_b1sheet = b1sheet.col_values(col_sets_sheet1[1])
        col_1_b2sheet = b2sheet.col_values(col_sets_sheet2[0])
        col_2_b2sheet = b2sheet.col_values(col_sets_sheet2[1])
        if if_with_title == '1':
            print "Removing titles"
            col1_b1sheet = col_1_b1sheet[1:]
            col2_b1sheet = col_2_b1sheet[1:]
            col1_b2sheet = col_1_b2sheet[1:]
            col2_b2sheet = col_2_b2sheet[1:]
        print "Round columns with number type"
        for i, val in enumerate(col2_b1sheet):
            col2_b1sheet = round(val,2)
        for i, val in enumerate(col2_b2sheet):
            col2_b2sheet = round(val,2)
        # Get sum value of number cols
        sum1 = sum(col2_b1sheet)
        sum2 = sum(col2_b2sheet)
        print "Do zipping..."
        zip1 = zip(col1_b1sheet, col2_b1sheet)
        zip2 = zip(col1_b2sheet, col2_b2sheet)
        print "Sort ziped list"
        zip1.sort()
        zip2.sort()
        print "Compare rows in summary"
        len1 = len(zip1)
        len2 = len(zip2)
        print len1, '--', len2
        compare_result = compare_result+":\n 总数比对:"
        if len1 == len2:
            print "记录总数比较一致!"
            compare_result = compare_result+"结果一致,均为"+str(len1)+"条;"
        else:
            print "记录总数不一致!"
            compare_result = compare_result+"结果不一致,"+ datasrc +"为"+str(len1)+"条,"+datadst +"为"+str(len2)+"条;"
        print sum1, '--', sum2
        if round(sum1,2) == round(sum2,2):
            print "总金额比较一致!"
            compare_result = compare_result+"总金额比较一致,"+"均为"+str(sum1)+";\n"
        else:
            print "总金额不一致!"
            compare_result = compare_result+"总金额不一致,"+datasrc +"为"+str(sum1)+","+datadst +"为"+str(sum2)+";\n"
        print "Get different rows in detail"
        cnt = 0
        for c in range(len(zip1)):
            if zip1[c] != zip2[c]:
                cnt += 1
                print zip1[c], '--', zip2[c]
        if cnt >0:
            print cnt, "行比较有差异!"
            compare_result = compare_result + " 明细比对:存在"+str(cnt)+"条差异。"
        else:
            print "未发现明细差异数据"
            compare_result = compare_result + " 明细比对:无差异。"
        print compare_result
        self.compare_result = compare_result
        print "Finished!"
    def getResult(self):
        return self.compare_result
         
datasrc = "源数据1"
datadst = "源数据2"
f1_sheet_index = 0
f2_sheet_index = 0
if_with_title = '1'

compare_result = "比对结果:"
f1 = r'D:\tmp\src001.xlsx'
f2 = r'D:\tmp\tmp001.xlsx'
col_sets_sheet1 = [2,4] #取第3、5列
col_sets_sheet2 = [1,2] #取第2、3列
# 组装dataList
dataList = [compare_result, datasrc, datadst, f1, f2, col_sets_sheet1, col_sets_sheet2, f1_sheet_index, f2_sheet_index, if_with_title]
dc1 = DataComparison(dataList)
# 打印比较结果
print dc1.getResult()




总结:
本次主要练习了使用xlrd读取xls文件,并对文件记录进行加工、比较。下一步将练习xlwd并增加对文件写入的相关操作。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-54859-1-1.html 上篇帖子: python网页数据抓取全纪录 下篇帖子: Python除法运算和幂运算代码实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表