python读取两个csv文件数据,进行查找匹配出现次数
现有需求 表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', 'w', newline='') # 设定写入模式
csv_write = csv.writer(out, dialect='excel')
# 写入具体内容
csv_write.writerow(['渠道名称','次数']) for item in dicList:
print(item+":"+str(dicList[item]))
csv_write.writerow([item,str(dicList[item])])
out.close()
导出数据结果:
python读取两个csv文件数据,进行查找匹配出现次数的更多相关文章
- java 两个csv文件数据去重
1.pom.xml配置 <dependency> <groupId>commons-io</groupId> <artifactId>commons-i ...
- python读取和写入csv文件
读取csv文件: def readCsv(): rows=[] with file(r'E:\py\py01\Data\system.csv','rb') as f: reads=csv.reader ...
- python读取并写入csv文件
在ubuntu下,新建.csv文件的方法是使用LibreOffice来创建一个数据表,然后我们把表格存储为.csv的格式: “Save as”菜单把我们的表格存为一个CSV的文件格式:命名为csvDa ...
- CSV文件数据如何读取、导入、导出到新的CSV文件中以及CSV文件的创建
CSV文件数据如何读取.导入.导出到新的CSV文件中以及CSV文件的创建 一.csv文件的创建 (1)新建一个文本文档: 打开新建文本文档,进行编辑. 注意:关键字与关键字之间用英文半角逗号隔开.第一 ...
- python读取与写入csv,txt格式文件
python读取与写入csv,txt格式文件 在数据分析中经常需要从csv格式的文件中存取数据以及将数据写书到csv文件中.将csv文件中的数据直接读取为dict类型和DataFrame是非常方便也很 ...
- java读取目录下所有csv文件数据,存入三维数组并返回
package dwzx.com.get; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; ...
- C#使用Linq to csv读取.csv文件数据
前言:今日遇到了一个需要读取CSV文件类型的EXCEL文档数据的问题,原本使用NPOI的解决方案直接读取文档数据,最后失败了,主要是文件的类型版本等信息不兼容导致.其他同事有使用linq to csv ...
- C语言进行csv文件数据的读取
C语言进行csv文件数据的读取: #include <stdio.h> #include <string.h> #include <malloc.h> #inclu ...
- jmeter参数化、添加变量、生成随机数和导入csv文件数据
Remarks:本次使用jmeter版本为4.0 以下数据都在必应中演示: 添加普通变量 1.添加 User Defined Variables(用户自定义变量) 2.设置变量 3.使用变量 4.查看 ...
随机推荐
- Asp: 解决脚本输出网页出现乱码情况
很久没碰asp,都有点生疏了,唉... 今天写一个小程序,发现网页静态部分输出不会乱码,asp脚本部分输出在360浏览器上会显示乱码,但在firefox和chrome上测试却不会显示乱码,我已经在代码 ...
- Sublime Text3—Code Snippets(自定义代码片段)
摘要 程序员总是会不断的重复写一些简单的代码片段,为了提高编码效率,我们可以把经常用到的代码保存起来再调用. 平时用sublime安装各种插件,使用Tab键快速补全,便是snippets(可译为代码片 ...
- 微软笔记工具OneNote
闲来无事,就在网上找找记笔记的软件工具.发现了微软的OneNote. 门槛还是比较高的:需要微软账户,安装也比较慢.不过用起来体验不错.除了干净的界面,功能也不错,还能同步到云端,这样你随时随地都可以 ...
- toogle
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 方法重载(overroad)和方法覆盖(override)------java基础知识总结
a.什么是方法重载?(同一个类中)方法重载是指在同一个类中,出现方法名相同,参数列表不同的情况. b.什么是方法覆盖?(子父类中)方法覆盖是指在子类中,出现和父类一模一样的方法声明的时候,会运行子类的 ...
- Java_Mybatis_注解代理写法
Mybatis的开发方式其实有3种: 1. 原始Dao开发(就是把mapper接口.映射文件和实现类都一并开发) 2. xml代理(就是只实现mapper接口和映射文件) 3.注解代理(就是只实现ma ...
- 网络编程基础【day09】:实现简单地ssh(四)
本节内容 概述 简单ssh socket接收大数据的困惑 一.概述 我们用过linux的就知道什么是ssh,它是一种客户端和服务端交互返回的一个解决,输入一个命令,给我返回什么,接下来我们说一说,如何 ...
- 收到offer!
今天收到了自己中意的offer,公司在上海,这也意味着自己毕业后的第一份工作也要结束了. 要说再见了,杭州,尽管相处的时间不久,也认识了一些朋友.还得向他们做声道别. 心情滋味难名,短短的一年,自己由 ...
- Linux记录-分区(df/fdisk/mount/umount/fuser)
1.查看磁盘挂载(df -TH) 2.卸载umount /dev/vdb1 3.查杀用户进程(fuser -m -v -i -k /dev/vdb1) 4.再次卸载umount /dev/vdb1,并 ...
- 史上最全 40 道 Dubbo 面试题及答案
https://blog.csdn.net/zl1zl2zl3/article/details/83721147