xls和csv之间数据比对

2017-08-14  本文已影响0人  Watanuki

关键词:python csv xls pandas xlrd

接到同事的抱怨,说每个月需要对比详单,审计是否有违规操作。

vlookup拖一拖?
——行数太多,电脑卡死> <
那你现在怎么做的?
——正则把号码选出来放一列,然后到另一个表里ctrl+f。

21世纪了竟然还有这么男默女泪的事情发生在周围,义不容辞mission accepted,说你把原表给我吧,以后每个月你只要点一下就行,点两下算我输。
openpyxl都准备好了,磨刀霍霍杀过去发现一个表是xls,一个表是csv,不支持……

哎呀这个,你原表导出来的时候能不能选格式?
——???
你这些工单为什么还要合并,我模块读不了……
——???
合并就算了为什么有的是str有的是int有的是float,录入的时候能不能规范下格式?
——???

作为一个程序猿竟然给客户提这么多要求……回头看看真是无地自容。为了保住职业操守,challege accepted,点两下算我输。
先上最终代码,由于隐私问题不效果演示了,就是从表a某列提关键词然后去表b匹配,再返还同行的值。如果都是xlsx的话根据我写月报的经验已经轻松应对了,但涉及到csv和合并项于是意外的花了很多时间。(程序员加班,能算加吗?)

def fulfill(pdcsv):#提取号码
    pdcsv['手机号'] = ''
    pdcsv['工单编号'] = ''
    pdcsv['操作内容'] = ''
    index = 0 
    for i in range(len(pdcsv)):
        if index == 0:#寻找手机号所在列
            for x in range(len(pdcsv.loc[0])):
                if pdcsv.loc[i][x] == '事件内容':
                    index = x
        else:#提取手机号,放入倒数第三列
            temp = pdcsv.loc[i][index] 
            phone = re.findall(r'[0-9]{11}',temp) #匹配手机号
            if phone:
                pdcsv.loc[i][-3] = phone[0]
def match(pdcsv,sheet):
    for i in range(len(pdcsv)):
        phone = pdcsv.iloc[i][-3]
        if phone:#仅处理非空行
            for n in range(sheet.nrows):
                if str(sheet.cell(n,2).value).replace('.0','') == phone: #手机号为第2行
                    x = n
                    while sheet.cell(x,4).value == '':#处理合并项
                        x -= 1
                    pdcsv.loc[i][-2] = sheet.cell(x,7).value#复制查询单编号
                    pdcsv.loc[i][-1] = sheet.cell(x,4).value#复制查询内容
                    #print(pdcsv.loc[i][-1])
def main():
    csvfile = open(r'C:\Users\ben\Desktop\ZSGA0001.csv','r')#注意修改csv文件位置
    pdcsv=pandas.read_csv(csvfile)
    fulfill(pdcsv)
    print('已提取号码')
    xlsfile = xlrd.open_workbook(r'C:\Users\ben\Desktop\查询明细201706.xls','r')#注意修改xls文件位置
    sheet = xlsfile.sheets()[0]
    match(pdcsv,sheet)
    print('查询操作是否有相应来单,如有,复制工单编号')
    #print(pdcsv.loc[1:23])
    pdcsv.to_csv(r'C:\Users\ben\Desktop\ZSGA0003.csv') 

整体思路是用xlrd来读取手动录入的工单.xls,用pandas来处理csv文件。过程中有这么几个注意的地方:

p.s.1:执行出错的时候冷静下看看自己的桌面,分小段调试,logging检查。

python是不会有错的,如果结果不对一定是你的问题

p.s.2:其实中途出现很多灵异意外结果的时候我很想和朋友说一声要不你手动把CSV和XLS贴在一个XLSX里再执行代码?(闭嘴)
p.s.3.:怎么办我发现最后执行的时候还需要手动输入文件名,是不是算我输了()
p.s.4:同事问为什么不搞个access数据库算了还一劳永逸……我……因为我的心已经给了python?

上一篇 下一篇

猜你喜欢

热点阅读