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

 

 導出數據結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM