- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python批量查询、汉字去重处理CSV文件由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
CSV文件用记事本打开后一般为由逗号隔开的字符串,其处理方法用Python的代码如下。为方便各种程度的人阅读在代码中有非常详细的注释.
1.查询指定列,并保存到新的csv文件.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# -*- 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文件.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# -*- 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文件.
一般去重都是数字或者字符去重,可以直接调用相应函数,而汉字去重就比只能循环比较了。所以这个算是包容性相当大的一种方式.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# -*- 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批量查询、汉字去重处理CSV文件的文章就讲到这里了,如果你想了解更多关于python批量查询、汉字去重处理CSV文件的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
对于 Metal ,如果对主纹理进行 mipmap 处理,是否还需要对多采样纹理进行 mipmap 处理?我阅读了苹果文档,但没有得到任何相关信息。 最佳答案 Mipmapping 适用于您将从中
我正在使用的代码在后端 Groovy 代码中具有呈现 GSP(Groovy 服务器页面)的 Controller 。对于前端,我们使用 React-router v4 来处理路由。我遇到的问题是,通过
我们正在 build 一个巨大的网站。我们正在考虑是在服务器端(ASP .Net)还是在客户端进行 HTML 处理。 例如,我们有 HTML 文件,其作用类似于用于生成选项卡的模板。服务器端获取 HT
我正在尝试将图像加载到 void setup() 中的数组中,但是当我这样做时出现此错误:“类型不匹配,'processing .core.PImage' does not匹配“processing.
我正在尝试使用其私有(private)应用程序更新 Shopify 上的客户标签。我用 postman 尝试过,一切正常,但通过 AJAX,它带我成功回调而不是错误,但成功后我得到了身份验证链接,而不
如何更改我的 Processing appIconTest.exe 导出的默认图标在窗口中的应用程序? 默认一个: 最佳答案 经过一些研究,我能找到的最简单的解决方案是: 进入 ...\process
我在 Processing 中做了一个简单的小游戏,但需要一些帮助。我有一个 mp3,想将它添加到我的应用程序中,以便在后台循环运行。 这可能吗?非常感谢。 最佳答案 您可以使用声音库。处理已经自带
我有几个这样创建的按钮: 在 setup() PImage[] imgs1 = {loadImage("AREA1_1.png"),loadImage("AREA1_2.png"),loadImage
我正在尝试使用 Processing 创建一个多人游戏,但无法弄清楚如何将屏幕分成两个以显示玩家的不同情况? 就像在 c# 中一样,我们有Viewport leftViewport,rightView
我一直在尝试使用 Moore 邻域在处理过程中创建元胞自动机,到目前为止非常成功。我已经设法使基本系统正常工作,现在我希望通过添加不同的功能来使用它。现在,我检查细胞是否存活。如果是,我使用 fill
有没有办法用 JavaScript 代码检查资源使用情况?我可以检查脚本的 RAM 使用情况和 CPU 使用情况吗? 由于做某事有多种方法,我可能会使用不同的方法编写代码,并将其保存为两个不同的文件,
我想弄清楚如何处理这样的列表: [ [[4,6,7], [1,2,4,6]] , [[10,4,2,4], [1]] ] 这是一个整数列表的列表 我希望我的函数将此列表作为输入并返回列表中没有重复的整
有没有办法在不需要时处理 MethodChannel/EventChannel ?我问是因为我想为对象创建多个方法/事件 channel 。 例子: class Call { ... fields
我有一个关于在 Python3 中处理 ConnectionResetError 的问题。这通常发生在我使用 urllib.request.Request 函数时。我想知道如果我们遇到这样的错误是否可
我一直在努力解决这个问题几个小时,但无济于事。代码很简单,一个弹跳球(粒子)。将粒子的速度初始化为 (0, 0) 将使其保持上下弹跳。将粒子的初始化速度更改为 (0, 0.01) 或任何十进制浮点数都
我把自己弄得一团糟。 我想在我的系统中添加 python3.6 所以我决定在我的 Ubuntu 19.10 中卸载现有的。但是现在每次我想安装一些东西我都会得到这样的错误: dpkg: error w
我正在努力解决 Rpart 包中的 NA 功能。我得到了以下数据框(下面的代码) Outcome VarA VarB 1 1 1 0 2 1 1 1
我将 Java 与 JSF 一起使用,这是 Glassfish 3 容器。 在我的 Web 应用程序中,我试图实现一个文件(图像)管理系统。 我有一个 config.properties我从中读取上传
所以我一直在Processing工作几个星期以来,虽然我没有编程经验,但我已经转向更复杂的项目。我正在编写一个进化模拟器,它会产生具有随机属性的生物。 最终,我将添加复制,但现在这些生物只是在屏幕上漂
有人知道 Delphi 2009 对“with”的处理有什么不同吗? 我昨天解决了一个问题,只是将“with”解构为完整引用,如“with Datamodule、Dataset、MainForm”。
我是一名优秀的程序员,十分优秀!