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

 导出数据结果:

原文地址:https://www.cnblogs.com/dongml/p/10175542.html