码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-12-25 19:56:52      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:代码   汇总   去掉   数字   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()
   
View Code

 导出数据结果:

 

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

标签:代码   汇总   去掉   数字   sed   nbsp   info   list   writer   

原文地址:https://www.cnblogs.com/dongml/p/10175542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!