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

     导出数据结果:

  • 相关阅读:
    17、springcloud整合lettuce使用redis
    16、springcloud整合Swagger2构建Restful服务的APIs
    15、Feign整合断路器监控Hystrix Dashboard
    14、Ribbon整合断路器监控Hystrix Dashboard
    13、如何使用断路器监控Hystrix Dashboard
    12、Feign整合断路器Hystrix
    wince中对ini文件的操作
    winform应用程序更新 带进度条
    wince隐藏任务栏
    一文学会JVM性能优化
  • 原文地址:https://www.cnblogs.com/dongml/p/10175542.html
Copyright © 2011-2022 走看看