Board logo

标题: [原创代码] python正则提取CSV文件数据计算导购客单价.py [打印本页]

作者: 依山居    时间: 2015-11-22 11:07     标题: python正则提取CSV文件数据计算导购客单价.py

本帖最后由 依山居 于 2015-11-22 11:54 编辑

python正则提取CSV文件数据计算导购客单价.py
  1. """
  2. python正则提取CSV文件数据计算导购客单价.py
  3. 题目来源 https://github.com/FGFW/FCNNIC
  4. 依山居 4:36 2015/11/22
  5. 看了看python自带的csv库貌似也没能解决啥问题,
  6. 干脆就自己用正则来写了代码量出乎意料的少.
  7. 在线查本csv表格 http://t.cn/RU3hoB0
  8. 下载csv表格 http://t.cn/RU3haTL
  9. 计算公式为:
  10. 导购日客单价=导购日成交金额/日客单数
  11. 每个相同的单据编号为1单,也就是去重后得到该导购的日客单数
  12. 导购日成交金额=导购完成的日所有单总和,也可以小计中倒数第二列直接提取
  13. 要求:计算出CSV表格中每位导购的客单价.
  14. 思路是正则匹配(导购)小计得到导购名字,顺便把该导购成交金额提取了。
  15. 然后再集合解析正则匹配该导购所有单并去重,一条语句得到日客单数。
  16. """
  17. import re
  18. rec=re.compile("\((.+)\)小计.+,.+,(\d+.\d+),.*")
  19. with open("0914零售数据.csv") as f:
  20.     cf=f.read()
  21.     f.close()
  22. dglist=re.findall(rec,cf) #得到格式如[('顾意珍', '480.00'), ('张彩菊', '505.00'),..]
  23. for d,t in dglist: #迭代dglist,如d得到顾意珍,t得到她的当天销售额480.00
  24.     rec=re.compile("%s,\d+-\d+-\d+,(\w+-\d+),"%d) #用导购名字拼成正则串,那么匹配到的都是她的单子
  25.     多少单=len({l for l in re.findall(rec,cf)}) #相同的单号只算一个单,正则查找的结果放在集合,
  26.                                             #集合中元素不能重复,相当于去重处理,所以len长度可以得到该导购的单量
  27.     客单价=float(t)/多少单 #t还是字符串,需要转成float再计算
  28.     print("导购:%s 日成交金额: %s 日客单价:%3.2f  日单量:%s" %(d,t,客单价,多少单))
  29. """
  30. 输出:
  31. >>>
  32. 导购:顾意珍 日成交金额: 480.00 日客单价:26.67  日单量:18
  33. 导购:张彩菊 日成交金额: 505.00 日客单价:28.06  日单量:18
  34. ...
  35. """
复制代码

作者: CrLf    时间: 2015-11-22 12:01

贪婪匹配?
作者: 依山居    时间: 2015-11-22 12:03

回复 2# CrLf


    其实是我懒。因为CSV有固定格式,所以这样写也没什么问题。
作者: 依山居    时间: 2015-11-22 12:12

回复 2# CrLf


    另,版主啊。列表解析的写法简直有毒啊。最近我学会这写法之后老忍不住整个迭代嵌套都想要写成一行啊。
作者: CrLf    时间: 2015-11-22 12:36

回复 4# 依山居


    是哒,好爽




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2