python读取两个csv文件数据,进行查找匹配出现次数

Posted 董明龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

 导出数据结果:

 

以上是关于python读取两个csv文件数据,进行查找匹配出现次数的主要内容,如果未能解决你的问题,请参考以下文章

将两个 csv 文件与 python pandas 进行比较

Python:读取两个 csv 文件组合成一个新的 cvs 文件,错误:太多值无法解压

Python:读取两个 csv 文件组合成一个新的 cvs 文件,错误:太多值无法解压

如何使用 python pandas 在本地系统 Jupyter Notebook 中读取两个较大的 5GB csv 文件?如何在本地加入两个数据框进行数据分析?

用python读取一个文件夹下的所有CSV文件里某一列数据中最大值,将此最大值所在行截取到新CSV文件中?

pandas读取excel文件指定列