xls和csv之间数据比对

关键词: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文件。过程中有这么几个注意的地方:

  • openpyxl其实也支持xls,但对合并格的读取我不是很明白……所以干脆换新模块处理xls。读是xlrd,写是xlwt(当然这里不用)

  • csv文件的话用pandas读写都挺好(而且名字萌),但注意要安装好numpy+mkl,在线各种失败,最后离线下载(这个文件100多m吓死人)然后pip install wheel搞定。(各种调用失败的时候差点想文本读取,sep=‘,')

    • 顺便说一下在同事的32位系统里直接pip install pandas 就成功了……|||
  • 一开始运行的时候合并项没有匹配到,以为是合并的读取写错了,测试了下没问题,只好把读取列+序号输出,发现有的号码录入成float,所以字符匹配的时候不相等。考虑过eval,但是由于还有别的信息干扰,最终采取 str(value.replace('.0','') 解决。

    • 顺便说一下合并项在xlrd里读取时,首行是合并值,其他行是空。用个递减循环处理。
  • 再执行的时候发现.loc[m][n]重新赋值没有写成功,多次检查甚至新建一个也无法赋值……提示warning把一个值赋给slice。这灵异事件困扰了我好久,还以为之前修改成功的记忆是自己的幻觉。最终,重启解决(真是灵异了)

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容