zoukankan      html  css  js  c++  java
  • python读取两个csv文件数据,进行查找匹配出现次数

    现有需求 表1

    表2

    需要拿表1中的编码去表2中的门票编码列匹配,统计出现的次数,由于表2编码列是区域间,而且列不是固定的,代码如下

     1 #encoding:utf-8
     2 ##导入两个CSV进行比对
     3 import csv
     4 ##读取编码
     5 def GetQrCode(filePath):
     6     #定义一个空的list集合
     7     list = set()
     8     csv_file = csv.reader(open(filePath, 'r'))
     9     for item in csv_file:
    10         # 判断字符串是否为纯数字
    11         if (item[0].isdigit()):
    12             ##将正常的编码存储到集合
    13             yield item[0]
    14 
    15 
    16 def GetNumberList(filePath):
    17     csv_file = csv.reader(open(filePath, 'r'))
    18     #去掉表头
    19     flag=True
    20     for item in csv_file:
    21         if flag:
    22             # 去掉表头
    23             flag=False
    24             continue
    25         if len(item) > 1:
    26             yield item
    27 
    28 
    29 if __name__ == '__main__':
    30      #定义字典装结果集
    31      dicList={}
    32 
    33 
    34     #获取编码列表
    35      qrcodelist=GetQrCode('E:\new_qrcode.csv')
    36      #获取要匹配的号段list
    37      numberList=GetNumberList('E:\门票统计汇总 - 副本.csv')
    38      isBreak=False
    39      for qrcode in qrcodelist:   ##最外层全部的qrcode
    40          #print(qrcode)
    41          #注意,这里要讲list转换为列表,否则循环过的元素不会重复进行
    42          numberList=list(numberList)
    43          for numbers in numberList: ##号段里的每一行
    44              if isBreak:
    45                  isBreak=False
    46 
    47                  break
    48              numbers=[i for i in numbers if i != '']
    49              numbers=list(numbers)
    50              for number in numbers:
    51                  if number!=numbers[0]: #单个号段
    52                      if number !='':
    53                          #判断一组还是两组
    54                          numberLength=len(str(number).split('-'))
    55                          if numberLength>1:
    56                              #两组的
    57                              firstNumber=int(str(number).split('-')[0])
    58                              lastNumber=int(str(number).split('-')[1])
    59                              #print("first:"+str(firstNumber)+":"+str(lastNumber))
    60                              qrcode=int(qrcode)
    61 
    62                              if qrcode>=firstNumber and qrcode<=lastNumber:
    63                                  if numbers[0] in dicList.keys():
    64                                      dicList[numbers[0]]=int(dicList[numbers[0]])+1
    65                                  else:
    66                                      dicList[numbers[0]] =1
    67                                  isBreak=True
    68                                  break
    69                          else:
    70                              #一组的
    71                              #print(str(number))
    72                              firstNumber = int(number)
    73 
    74                              if qrcode==firstNumber:
    75                                  if numbers[0] in dicList.keys():
    76                                      dicList[numbers[0]]=int(dicList[numbers[0]])+1
    77                                  else:
    78                                      dicList[numbers[0]] =1
    79                                  isBreak = True
    80                                  break
    81 
    82 
    83     #讲结果集写入csv文件
    84      # 打开文件,追加a
    85      out = open('E:\resut_1.csv', 'w', newline='')
    86 
    87      # 设定写入模式
    88      csv_write = csv.writer(out, dialect='excel')
    89      # 写入具体内容
    90      csv_write.writerow(['渠道名称','次数'])
    91 
    92      for item in dicList:
    93          print(item+":"+str(dicList[item]))
    94          csv_write.writerow([item,str(dicList[item])])
    95      out.close()
    View Code

     导出数据结果:

  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/dongml/p/10175542.html
Copyright © 2011-2022 走看看