标签:代码 汇总 去掉 数字 sed nbsp info list writer
现有需求 表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()): ##将正常的编码存储到集合 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 item if __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()
导出数据结果:
标签:代码 汇总 去掉 数字 sed nbsp info list writer
原文地址:https://www.cnblogs.com/dongml/p/10175542.html