現有需求 表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()
導出數據結果:

