DDR爱好者之家 Design By 杰米
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秒.......
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月28日
2024年11月28日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]