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

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

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

(0)

相关推荐

  • Python3 实现随机生成一组不重复数并按行写入文件

    笔主在做一个项目要生成一组随机有序的整型数字,并按行输出到文本文件使用,恰好开始学习Python3,遂决定直接使用Python3解决 思路:与随机数相关的函数都要使用到random这个系统库,查看相关的开发文档发现random库下面有个sample(seq,n)函数比较符合,能在在一个序列中随机选择n个不重复的数,并返回一个list,接下来就是将一个list按行输出到一个文本文件中 过程: 1.导入random库 import random 2.生成一个自己自己想要的范围的序列,笔者是需要在1-

  • 对python读写文件去重、RE、set的使用详解

    如下所示: # -*- coding:utf-8 -*- from datetime import datetime import re def Main(): sourcr_dir = '/data/u_lx_data/fudan/muying/muying_11yue_all.txt' target_dir = '/data/u_lx_data/fudan/muying/python/uid_regular_get.txt' uset = set() #去重 print("开始.....&q

  • python 高效去重复 支持GB级别大文件的示例代码

    如下所示: #coding=utf-8 import sys, re, os def getDictList(dict): regx = '''[\w\~`\!\@\#\$\%\^\&\*\(\)\_\-\+\=\[\]\{\}\:\;\,\.\/\<\>\?]+''' with open(dict) as f: data = f.read() return re.findall(regx, data) def rmdp(dictList): return list(set(dictL

  • python删除本地夹里重复文件的方法

    上次的博文主要说了从网上下载图片,于是我把整个笑话网站的图片都拔下来了,但是在拔取的图片中有很多重复的,比如说页面的其他图片.重复发布的图片等等.所以我又找了python的一些方法,写了一个脚本可以删除指定文件夹里重复的图片. 一.方法和思路 1.比对文件是否相同的方法:hashlib库里提供了获取文件md5值的方法,所以我们可以通过md5值来判定是否图片相同 2.对文件的操作:os库里有对文件的操作方法,比如:os.remove()可以删除指定的文件, os.listdir()可以通过指定文件

  • python去除文件中重复的行实例

    python去除文件中重复的行,我们可以设置一个一个空list,res_list,用来加入没有出现过的字符行! 如果出现在res_list,我们就认为该行句子已经重复了,可以再加入到记录重复句子的list中. 如下代码: # -*- coding: UTF-8 -*- #程序功能是为了完成判断文件中是否有重复句子 #并将重复句子打印出来 res_list = [] #f = open('F:/master/master-work/code_of_graduate/LTP_data/raw_pla

  • Python实现的删除重复文件或图片功能示例【去重】

    本文实例讲述了Python实现的删除重复文件或图片功能.分享给大家供大家参考,具体如下: 通过python爬虫或其他方式保存的图片文件通常包含一些重复的图片或文件, 通过下面的python代码可以将重复的文件删除以达到去重的目的.其中,文件目录结构如下图: # /usr/bin/env python # -*- coding:utf-8 -*- # 运行的代码文件要放到删除重复的文件或图片所包含的目录中 import os import hashlib def filecount(): file

  • Python过滤txt文件内重复内容的方法

    Python过滤txt文件内重复内容,并将过滤后的内容保存到新的txt中 示例如下 原文件 处理之后的文件 直接上代码 # -*-coding:utf-8 -*- f = open("1.txt", "rb") n = f.read() f.close() m = n.split("\r\n") print "m=",m print m[1] m1 = [] for i in xrange(len(m)): if not m[

  • Python统计文件中去重后uuid个数的方法

    本文实例讲述了Python统计文件中去重后uuid个数的方法.分享给大家供大家参考.具体如下: 利用正则表达式按行获取日志文件中的的uuid,并且统计这些uuid的去重个数(去重利用set) import re pattern=re.compile(r'&uuid=.*&') uuidset=set() with open('request.log.2015-05-26','rt') as f: for line in f: all=pattern.findall(line) if len

  • Python实现的txt文件去重功能示例

    本文实例讲述了Python实现的txt文件去重功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python2 import shutil a=0 readDir = "/Users/Administrator/Desktop/old.txt" #old writeDir = "/Users/Administrator/Desktop/new.txt" #new # txtDir = "/home/Administ

  • Python实现对文件进行单词划分并去重排序操作示例

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.分享给大家供大家参考,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window breaks It is the east and Juliet is the sun Arise fair sun and kill the envious moon Who is already sick and pale with grief 样例输出: Enter fi

随机推荐