python批量查询、汉字去重处理CSV文件
作者:Lavender_sx 发布时间:2023-01-20 08:27:17
标签:python,批量查询,汉字去重
CSV文件用记事本打开后一般为由逗号隔开的字符串,其处理方法用Python的代码如下。为方便各种程度的人阅读在代码中有非常详细的注释。
1.查询指定列,并保存到新的csv文件。
# -*- coding: utf-8 -*-
'''''
Author: Good_Night
Time: 2018/1/30 03:50
Edition: 1.0
'''
# 导入必须的csv库
import csv
# 创建临时文件temp.csv找出所需要的列
temp_file = open("temp.csv", "w", newline='') # 如果不指定newline='',则每写入一行将有一空行被写入
temp_csv_writer = csv.writer(temp_file, dialect="excel")
# 读取input.csv文件,此时只有指定的一列数据
with open('input.csv') as file:
temp_readcsv = csv.reader(file, delimiter=',')
for row in temp_readcsv: # 取出input.csv所有列数据
temp = [row[3]] # 得到指定列数据
# print(row[3]) #print()打印input.csv文件中第3列所有数据
temp_csv_writer.writerow(temp) # 第3列每行数据循环写入temp.csv文件中
temp_file.close()
2.查询指定列中,每行数据出现在所有行数据的次数,并保存到新的csv文件。
# -*- coding: utf-8 -*-
'''''
Author: Good_Night
Time: 2018/1/30 03:50
Edition: 1.0
'''
# 导入必须的csv库
import csv
# 创建临时文件temp.csv找出所需要的列
temp_file = open("temp.csv", "w", newline='') # 如果不指定newline='',则每写入一行将有一空行被写入
temp_csv_writer = csv.writer(temp_file, dialect="excel")
# 读取input.csv文件,此时只有指定的一列数据
with open('input.csv') as file:
temp_readcsv = csv.reader(file, delimiter=',')
for row in temp_readcsv: # 取出input.csv所有列数据
temp = [row[3]] # 得到指定列数据
# print(row[3]) #print()打印input.csv文件中第3列所有数据
temp_csv_writer.writerow(temp) # 第3列每行数据循环写入temp.csv文件中
temp_file.close()
# 在临时文件基础上匹配所要找的数据,计算出次数生成out.csv文件
flag = 0 # 临时变量
out1 = [] # 新建数组来保存指定列的每行数据
time = [] # 新建数组来保存指定列的每行数据出现的次数
out_file = open("out.csv", "w", newline='') # 如果不指定newline='',则每写入一行将有一空行被写入
out_csv_writer = csv.writer(out_file, dialect="excel")
out_csv_writer.writerow(["TIMES"])
# 读取temp.csv文件,此时只有指定的一列数据
with open('temp.csv') as file2:
out_readcsv = csv.reader(file2, delimiter=',')
for St in out_readcsv: # 循环取出列的每行数据
out1.append(St) # append()将列的每行数据变为out1链表(list)的后续增加的元素,即将列数据变为一维数组。
# print(out1[1]) # 打印out1[n]的第n个元素,即原列的第n行元素
for i in range(len(out1)): # len()获得out1链表(list)中元素的个数,便于判断循环次数。
# print(out1[i]) # 打印out1链表所有元素,检验循环是否出错
flag = out1.count(out1[i]) # count()获得out1链表中第i个元素在所有元素中出现的次数。
time.append(flag) # 将获得的某元素出现的次数按顺序保存至time[]数组里
# print(time) # 打印显示所有元素出现的次数,判断是否出错
for j in range(len(out1)): # len()得到out1链表元素个数,依此作为time[]查找下标
times = [time[j]] # 取出元素对应出现的次数
out_csv_writer.writerow(times) # 写入out.csv文件里
print(times) # 打印显示次数
out_file.close()
因为是批量处理嘛~所以写的是所有数据重复出现的次数(但这个有点BUG,可能看完代码就知道了,没有去重!!!举个例子说a出现在第一行和第三行共2次,结果出来后就是第一行出现a,对应次数为2,第三行又出现a,对应次数也是2....这就是没有去重的麻烦之处,重复的数据会再次显示。)。但稍微修改一下可实现搜索某一数据出现的次数啦~
3.查询指定列中,每行数据出现在所有行数据的次数,去重处理后,并保存到新的csv文件。
一般去重都是数字或者字符去重,可以直接调用相应函数,而汉字去重就比只能循环比较了。所以这个算是包容性相当大的一种方式。
# -*- coding: utf-8 -*-
'''''
Author: Good Night
Time: 2018/2/7 18:50
Edition: 2.0
'''
# 导入必须的csv库
import csv
# 创建临时文件temp.csv找出所需要的列
temp_file = open("temp.csv", "w", newline='') # 如果不指定newline='',则每写入一行将有一空行被写入
temp_csv_writer = csv.writer(temp_file, dialect="excel")
# 读取input.csv文件,此时只有指定的一列数据
with open('input.csv') as file:
temp_readcsv = csv.reader(file, delimiter=',')
for row in temp_readcsv: # 取出input.csv所有列数据
temp = [row[3]] # 得到指定列数据
# print(row[3]) #print()打印input.csv文件中第3列所有数据
temp_csv_writer.writerow(temp) # 第3列每行数据循环写入temp.csv文件中
temp_file.close()
# 在临时文件基础上匹配所要找的数据,计算出次数生成out.csv文件
out1 = [] # 新建数组来保存指定列的每行数据
out_time = [] # 新建数组来保存指定列的每行数据出现的次数
out_file = open("out.csv", "w", newline='') # 如果不指定newline='',则每写入一行将有一空行被写入
out_csv_writer = csv.writer(out_file, dialect="excel")
out_csv_writer.writerow(["ID", "TIMES"]) # 写入标题 数据,出现次数
# 读取temp.csv文件,此时只有指定的一列数据
with open('temp.csv') as file2:
out_readcsv = csv.reader(file2, delimiter=',')
for St in out_readcsv: # 循环取出列的每行数据
out1.append(St) # append()将列的每行数据变为out1链表(list)的后续增加的元素,即将列数据变为一维数组。
print(out1) # 打印out1[n]的第n个元素,即原列的第n行元素
# list的迭代其实是以list中项的序列号来遍历的,不会因为list的的改变而改变,
# 永远都是按照序号的0,1,2...遍历。当删除其中某一项时,它之后的每一项的序列号各往前移一项.
# 当遍历list时,若发现0项是重复项(因为内嵌函数均处理第一个发现项),于是将其移除。当移除0项时,
# 原来的1项变为0项,以此类推。此时list迭代由1开始(0项已过),但此时的1项是原list的2项,这样子就漏掉原list的1项!
# 可以将list反转来进行删除操作,其本质就是放当发现某项具有重复项时,就从后往前删除。
# 比如迭代0项发现1项是它的重复项,那么就删除1项,删除1项后2项变1项,而此时list迭代正则到了1项。
# 从原始list的角度上来说,就跳过了1项。但是它却不影响去重,因为它跳过的是重复项。
# list的不重复迭代反而使去重效率更高且不会漏掉不重复项。因此原始list直接去重的核心问题不是迭代的漏项,而是迭代不能漏掉不重复项。
for i in out1:
a = out1.count(i) # 取元素
out_time.append(a) # 得到出现的次数
# print(i, a)
if a > 1:
out1.reverse() # 将list反转来进行删除操作
for k in range(1, a):
out1.remove(i) # 从后往前删除直到最前面的第一个为止,这样即删除了后面的,又保留了第一个!
out1.reverse() # 将list再反转回来,保证下次循环又是从原始顺序来删除
print(out1) # 此时out1链表(list)即去重后的list
print(out_time) # 元素出现的次数
for j in range(len(out1)): # len()得到out1链表元素个数,依此作为time[]查找下标
out_row = [out1[j], out_time[j]] # 取元素和对应的次数
out_csv_writer.writerow(out_row) # 写入out.csv文件里
out_file.close()
划重点!这个代码是经过了去重处理后的,完全不用担心会有重复数据显示啦~
Python处理此类数据相当快,大概一万行数据只需要1秒.......
来源:https://blog.csdn.net/Lavender_sx/article/details/79452831


猜你喜欢
- 在使用Python做开发的时候,时不时会给自己编写了一些小工具辅助自己的工作,但是由于开发依赖环境问题,多数只能在自己电脑上运行,拿到其它电
- gRPC 是通信协议基于 HTTP/2,支持多语言的 RPC 框架,使用 Protobuf 作为它的接口设计语言(IDL),可以通过 pro
- 2009年2月24日,Safari 4.0 beta版正式发布,Safari从它的3.2版本开始就已经支持所有的CSS选择器(包括最新的CS
- 文中涉及的示例代码,已同步更新到HelloGitHub-Team 仓库在上一篇教程中,我们通过手工方式将代码部署到了服务器。整个过程涉及到十
- 经过倒腾12306的登录,还是实现了,请求头很重要...各位感兴趣的可以继续写下去.....import sysimport timeimp
- 当我们需要将一个一维数组转换成一个多层结构的时候,最简单但是最慢的就是多个for循环嵌套,但是这样做有一些缺点,那就是效率太低、而且有多少层
- 效果:myvcode.class.php:封装创建验证码的类<?php/** file:myvcode.class.php* 验证码类
- 不用切图,只要设置基本的 图片及其属性即可!用鼠标右键控制图片翻转!<style>*{ FONT-SIZE: 12px; }se
- 本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法。分享给大家供大家参考。具体分析如下:这段代码主要用来从图片提取
- defaultdict 主要用来需要对 value 做初始化的情形。对于字典来说,key 必须是 hashable,immutable,un
- 在pandas中怎么样实现类似mysql查找语句的功能:select * from table where column_name = so
- 背景说明:10 * time.Second //正常数字相乘没错但是package mainimport "time"f
- 本文实例讲述了Python编程之string相关操作。分享给大家供大家参考,具体如下:#coding=utf8'''
- argparse模块用法一、 概念argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直
- 阻塞定义当来自应用程序的第一个连接控制锁而第二个连接需要相冲突的锁类型时,将发生阻塞。其结果是强制第二个连接等待,而在第一个连接上阻塞。不管
- 一、为什么使用Python进行网络爬虫?由于Python语言十分简洁,使用起来又非常简单、易学,通过Python 进行编写就像使用英语进行写
- sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。关于这个项目的详细介绍请看:
- 本文转自微信公众号:"算法与编程之美"1、问题描述使用HBuilder做一个简单的社区浏览界面。2、解决方案这是对HBu
- 最近为数据库服务器增加了内存,达到了最大支持的8G,数据库用的是mssql 2005 ,之前内存一直是4G的,不存在内存大和32位操作系统冲
- MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。它的特点是高性能、易部