python讀取兩個csv文件數據,進行查找匹配出現次數
阿新 • • 發佈:2018-12-25
def port utf-8 true csv enc pen qrc closed
現有需求 表1
表2
需要拿表1中的編碼去表2中的門票編碼列匹配,統計出現的次數,由於表2編碼列是區域間,而且列不是固定的,代碼如下
#encoding:utf-8 ##導入兩個CSV進行比對 import csv ##讀取編碼 def GetQrCode(filePath): #定義一個空的list集合 list = set() csv_file = csv.reader(open(filePath, ‘r‘)) for item in csv_file: # 判斷字符串是否為純數字 if (item[0].isdigit()):View Code##將正常的編碼存儲到集合 yield item[0] def GetNumberList(filePath): csv_file = csv.reader(open(filePath, ‘r‘)) #去掉表頭 flag=True for item in csv_file: if flag: # 去掉表頭 flag=False continue if len(item) > 1: yield itemif __name__ == ‘__main__‘: #定義字典裝結果集 dicList={} #獲取編碼列表 qrcodelist=GetQrCode(‘E:\\new_qrcode.csv‘) #獲取要匹配的號段list numberList=GetNumberList(‘E:\\門票統計匯總 - 副本.csv‘) isBreak=False for qrcode in qrcodelist: ##最外層全部的qrcode #print(qrcode) #註意,這裏要講list轉換為列表,否則循環過的元素不會重復進行numberList=list(numberList) for numbers in numberList: ##號段裏的每一行 if isBreak: isBreak=False break numbers=[i for i in numbers if i != ‘‘] numbers=list(numbers) for number in numbers: if number!=numbers[0]: #單個號段 if number !=‘‘: #判斷一組還是兩組 numberLength=len(str(number).split(‘-‘)) if numberLength>1: #兩組的 firstNumber=int(str(number).split(‘-‘)[0]) lastNumber=int(str(number).split(‘-‘)[1]) #print("first:"+str(firstNumber)+":"+str(lastNumber)) qrcode=int(qrcode) if qrcode>=firstNumber and qrcode<=lastNumber: if numbers[0] in dicList.keys(): dicList[numbers[0]]=int(dicList[numbers[0]])+1 else: dicList[numbers[0]] =1 isBreak=True break else: #一組的 #print(str(number)) firstNumber = int(number) if qrcode==firstNumber: if numbers[0] in dicList.keys(): dicList[numbers[0]]=int(dicList[numbers[0]])+1 else: dicList[numbers[0]] =1 isBreak = True break #講結果集寫入csv文件 # 打開文件,追加a out = open(‘E:\\resut_1.csv‘, ‘a‘, newline=‘‘) # 設定寫入模式 csv_write = csv.writer(out, dialect=‘excel‘) # 寫入具體內容 csv_write.writerow(‘渠道名稱‘,‘次數‘) for item in dicList: csv_write.writerow(item+‘,‘+str(dicList[item])) #print(str(item)+":"+ str(dicList[item])) out.close()
導出數據結果:
python讀取兩個csv文件數據,進行查找匹配出現次數