python批量查询、汉字去重处理CSV文件


Posted in Python onMay 31, 2018

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秒.......

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python snownlp情感分析简易demo(分享)
Jun 04 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
Python设计模式之策略模式实例详解
Jan 21 Python
使用python绘制二元函数图像的实例
Feb 12 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 Python
Python编写打字训练小程序
Sep 26 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
python 下载文件的几种方式分享
Apr 07 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 Python
python破解zip加密文件的方法
May 31 #Python
python删除本地夹里重复文件的方法
Nov 19 #Python
Python处理命令行参数模块optpars用法实例分析
May 31 #Python
python筛选出两个文件中重复行的方法
May 31 #Python
python删除文本中行数标签的方法
May 31 #Python
Python使用wget实现下载网络文件功能示例
May 31 #Python
Python使用progressbar模块实现的显示进度条功能
May 31 #Python
You might like
PHP+DBM的同学录程序(2)
2006/10/09 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
PHP反射基础知识回顾
2020/09/10 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
Python中运算符"=="和"is"的详解
2016/10/08 Python
django ORM之values和annotate使用详解
2020/05/19 Python
python中tab键是什么意思
2020/06/18 Python
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
2014年服务员个人工作总结
2014/12/23 职场文书
邀请函格式范文
2015/02/02 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
公司与个人合作协议书
2016/03/19 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
Pandas 稀疏数据结构的实现
2021/07/25 Python
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python