一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python批量查詢、漢字去重處理CSV文件

python批量查詢、漢字去重處理CSV文件

2021-02-27 00:42Lavender_sx Python

這篇文章主要為大家詳細介紹了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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 无限在线看免费视频大全 | 色多多视频网站 | 亚洲欧美成人综合 | 亚洲品质自拍视频 | 精品国产综合区久久久久久 | 私人影院免费观看 | 99久久成人 | 91精品综合国产在线观看 | 天天草人人草 | 精品精品国产yyy5857香蕉 | 全肉一女n男np高h乳 | 97影院3 | 国产成人盗拍精品免费视频 | 亚洲精品色综合久久 | 免费国产高清视频 | 国产福利不卡 | 香蕉国产人午夜视频在线 | 欧洲美女女同 | 男人的天堂va | 久久婷婷电影网 | 青青青青久久国产片免费精品 | 密臀tv| 美女毛片在线 | 互换娇妻爽文100系列小说 | 日韩网站在线 | 三体动漫在线观看免费完整版2022 | 秋霞一级毛片 | 欧美成人一区二区 | 欧美又大又粗又长又硬 | 四虎最新免费观看网址 | 我的奶头被客人吸的又肿又红 | 欧美久久影院 | 美女尿口照片 | 国产午夜视频在线观看网站 | 国产一二三区视频 | 国产精品午夜剧场 | 男人懂得网站 | 国产乱码在线精品可播放 | 深夜福利一区 | 成在线人免费视频一区二区三区 | 香蕉视频在线观看网址 |