欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2018年05月31日 11:55:00   作者:Lavender_sx  
這篇文章主要為大家詳細(xì)介紹了python批量查詢、漢字去重處理CSV文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

CSV文件用記事本打開(kāi)后一般為由逗號(hào)隔開(kāi)的字符串,其處理方法用Python的代碼如下。為方便各種程度的人閱讀在代碼中有非常詳細(xì)的注釋。

1.查詢指定列,并保存到新的csv文件。

# -*- coding: utf-8 -*- 
''''' 
Author: Good_Night 
Time: 2018/1/30 03:50 
Edition: 1.0 
''' 
# 導(dǎo)入必須的csv庫(kù) 
import csv 
 
# 創(chuàng)建臨時(shí)文件temp.csv找出所需要的列 
temp_file = open("temp.csv", "w", newline='') # 如果不指定newline='',則每寫入一行將有一空行被寫入 
temp_csv_writer = csv.writer(temp_file, dialect="excel") 
# 讀取input.csv文件,此時(shí)只有指定的一列數(shù)據(jù) 
with open('input.csv') as file: 
  temp_readcsv = csv.reader(file, delimiter=',') 
  for row in temp_readcsv: # 取出input.csv所有列數(shù)據(jù) 
    temp = [row[3]] # 得到指定列數(shù)據(jù) 
#    print(row[3])  #print()打印input.csv文件中第3列所有數(shù)據(jù) 
    temp_csv_writer.writerow(temp) # 第3列每行數(shù)據(jù)循環(huán)寫入temp.csv文件中 
temp_file.close() 

2.查詢指定列中,每行數(shù)據(jù)出現(xiàn)在所有行數(shù)據(jù)的次數(shù),并保存到新的csv文件。

# -*- coding: utf-8 -*- 
''''' 
Author: Good_Night 
Time: 2018/1/30 03:50 
Edition: 1.0 
''' 
# 導(dǎo)入必須的csv庫(kù) 
import csv 
 
# 創(chuàng)建臨時(shí)文件temp.csv找出所需要的列 
temp_file = open("temp.csv", "w", newline='') # 如果不指定newline='',則每寫入一行將有一空行被寫入 
temp_csv_writer = csv.writer(temp_file, dialect="excel") 
# 讀取input.csv文件,此時(shí)只有指定的一列數(shù)據(jù) 
with open('input.csv') as file: 
  temp_readcsv = csv.reader(file, delimiter=',') 
  for row in temp_readcsv: # 取出input.csv所有列數(shù)據(jù) 
    temp = [row[3]] # 得到指定列數(shù)據(jù) 
#    print(row[3])  #print()打印input.csv文件中第3列所有數(shù)據(jù) 
    temp_csv_writer.writerow(temp) # 第3列每行數(shù)據(jù)循環(huán)寫入temp.csv文件中 
temp_file.close() 
 
# 在臨時(shí)文件基礎(chǔ)上匹配所要找的數(shù)據(jù),計(jì)算出次數(shù)生成out.csv文件 
flag = 0 # 臨時(shí)變量 
out1 = [] # 新建數(shù)組來(lái)保存指定列的每行數(shù)據(jù) 
time = [] # 新建數(shù)組來(lái)保存指定列的每行數(shù)據(jù)出現(xiàn)的次數(shù) 
out_file = open("out.csv", "w", newline='') # 如果不指定newline='',則每寫入一行將有一空行被寫入 
out_csv_writer = csv.writer(out_file, dialect="excel") 
out_csv_writer.writerow(["TIMES"]) 
# 讀取temp.csv文件,此時(shí)只有指定的一列數(shù)據(jù) 
with open('temp.csv') as file2: 
  out_readcsv = csv.reader(file2, delimiter=',') 
  for St in out_readcsv: # 循環(huán)取出列的每行數(shù)據(jù) 
    out1.append(St) # append()將列的每行數(shù)據(jù)變?yōu)閛ut1鏈表(list)的后續(xù)增加的元素,即將列數(shù)據(jù)變?yōu)橐痪S數(shù)組。 
#  print(out1[1]) # 打印out1[n]的第n個(gè)元素,即原列的第n行元素 
  for i in range(len(out1)): # len()獲得out1鏈表(list)中元素的個(gè)數(shù),便于判斷循環(huán)次數(shù)。 
#    print(out1[i]) # 打印out1鏈表所有元素,檢驗(yàn)循環(huán)是否出錯(cuò) 
    flag = out1.count(out1[i]) # count()獲得out1鏈表中第i個(gè)元素在所有元素中出現(xiàn)的次數(shù)。 
    time.append(flag) # 將獲得的某元素出現(xiàn)的次數(shù)按順序保存至time[]數(shù)組里 
#  print(time) # 打印顯示所有元素出現(xiàn)的次數(shù),判斷是否出錯(cuò) 
  for j in range(len(out1)): # len()得到out1鏈表元素個(gè)數(shù),依此作為time[]查找下標(biāo) 
    times = [time[j]] # 取出元素對(duì)應(yīng)出現(xiàn)的次數(shù) 
    out_csv_writer.writerow(times) # 寫入out.csv文件里 
    print(times) # 打印顯示次數(shù) 
out_file.close() 

因?yàn)槭桥刻幚砺飤所以寫的是所有數(shù)據(jù)重復(fù)出現(xiàn)的次數(shù)(但這個(gè)有點(diǎn)BUG,可能看完代碼就知道了,沒(méi)有去重?。?!舉個(gè)例子說(shuō)a出現(xiàn)在第一行和第三行共2次,結(jié)果出來(lái)后就是第一行出現(xiàn)a,對(duì)應(yīng)次數(shù)為2,第三行又出現(xiàn)a,對(duì)應(yīng)次數(shù)也是2....這就是沒(méi)有去重的麻煩之處,重復(fù)的數(shù)據(jù)會(huì)再次顯示。)。但稍微修改一下可實(shí)現(xiàn)搜索某一數(shù)據(jù)出現(xiàn)的次數(shù)啦~

3.查詢指定列中,每行數(shù)據(jù)出現(xiàn)在所有行數(shù)據(jù)的次數(shù),去重處理后,并保存到新的csv文件。

一般去重都是數(shù)字或者字符去重,可以直接調(diào)用相應(yīng)函數(shù),而漢字去重就比只能循環(huán)比較了。所以這個(gè)算是包容性相當(dāng)大的一種方式。

# -*- coding: utf-8 -*- 
''''' 
Author: Good Night 
Time: 2018/2/7 18:50 
Edition: 2.0 
''' 
# 導(dǎo)入必須的csv庫(kù) 
import csv 
 
# 創(chuàng)建臨時(shí)文件temp.csv找出所需要的列 
temp_file = open("temp.csv", "w", newline='') # 如果不指定newline='',則每寫入一行將有一空行被寫入 
temp_csv_writer = csv.writer(temp_file, dialect="excel") 
# 讀取input.csv文件,此時(shí)只有指定的一列數(shù)據(jù) 
with open('input.csv') as file: 
  temp_readcsv = csv.reader(file, delimiter=',') 
  for row in temp_readcsv: # 取出input.csv所有列數(shù)據(jù) 
    temp = [row[3]] # 得到指定列數(shù)據(jù) 
#    print(row[3]) #print()打印input.csv文件中第3列所有數(shù)據(jù) 
    temp_csv_writer.writerow(temp) # 第3列每行數(shù)據(jù)循環(huán)寫入temp.csv文件中 
temp_file.close() 
 
# 在臨時(shí)文件基礎(chǔ)上匹配所要找的數(shù)據(jù),計(jì)算出次數(shù)生成out.csv文件 
out1 = [] # 新建數(shù)組來(lái)保存指定列的每行數(shù)據(jù) 
out_time = [] # 新建數(shù)組來(lái)保存指定列的每行數(shù)據(jù)出現(xiàn)的次數(shù) 
out_file = open("out.csv", "w", newline='') # 如果不指定newline='',則每寫入一行將有一空行被寫入 
out_csv_writer = csv.writer(out_file, dialect="excel") 
out_csv_writer.writerow(["ID", "TIMES"]) # 寫入標(biāo)題 數(shù)據(jù),出現(xiàn)次數(shù) 
# 讀取temp.csv文件,此時(shí)只有指定的一列數(shù)據(jù) 
with open('temp.csv') as file2: 
  out_readcsv = csv.reader(file2, delimiter=',') 
  for St in out_readcsv: # 循環(huán)取出列的每行數(shù)據(jù) 
    out1.append(St) # append()將列的每行數(shù)據(jù)變?yōu)閛ut1鏈表(list)的后續(xù)增加的元素,即將列數(shù)據(jù)變?yōu)橐痪S數(shù)組。 
  print(out1)  # 打印out1[n]的第n個(gè)元素,即原列的第n行元素 
 
# list的迭代其實(shí)是以list中項(xiàng)的序列號(hào)來(lái)遍歷的,不會(huì)因?yàn)閘ist的的改變而改變, 
# 永遠(yuǎn)都是按照序號(hào)的0,1,2...遍歷。當(dāng)刪除其中某一項(xiàng)時(shí),它之后的每一項(xiàng)的序列號(hào)各往前移一項(xiàng). 
# 當(dāng)遍歷list時(shí),若發(fā)現(xiàn)0項(xiàng)是重復(fù)項(xiàng)(因?yàn)閮?nèi)嵌函數(shù)均處理第一個(gè)發(fā)現(xiàn)項(xiàng)),于是將其移除。當(dāng)移除0項(xiàng)時(shí), 
# 原來(lái)的1項(xiàng)變?yōu)?項(xiàng),以此類推。此時(shí)list迭代由1開(kāi)始(0項(xiàng)已過(guò)),但此時(shí)的1項(xiàng)是原list的2項(xiàng),這樣子就漏掉原list的1項(xiàng)! 
  # 可以將list反轉(zhuǎn)來(lái)進(jìn)行刪除操作,其本質(zhì)就是放當(dāng)發(fā)現(xiàn)某項(xiàng)具有重復(fù)項(xiàng)時(shí),就從后往前刪除。 
  # 比如迭代0項(xiàng)發(fā)現(xiàn)1項(xiàng)是它的重復(fù)項(xiàng),那么就刪除1項(xiàng),刪除1項(xiàng)后2項(xiàng)變1項(xiàng),而此時(shí)list迭代正則到了1項(xiàng)。 
  # 從原始list的角度上來(lái)說(shuō),就跳過(guò)了1項(xiàng)。但是它卻不影響去重,因?yàn)樗^(guò)的是重復(fù)項(xiàng)。 
  # list的不重復(fù)迭代反而使去重效率更高且不會(huì)漏掉不重復(fù)項(xiàng)。因此原始list直接去重的核心問(wèn)題不是迭代的漏項(xiàng),而是迭代不能漏掉不重復(fù)項(xiàng)。 
  for i in out1: 
    a = out1.count(i) # 取元素 
    out_time.append(a) # 得到出現(xiàn)的次數(shù) 
#    print(i, a) 
    if a > 1: 
      out1.reverse() # 將list反轉(zhuǎn)來(lái)進(jìn)行刪除操作 
      for k in range(1, a): 
        out1.remove(i) # 從后往前刪除直到最前面的第一個(gè)為止,這樣即刪除了后面的,又保留了第一個(gè)! 
      out1.reverse() # 將list再反轉(zhuǎn)回來(lái),保證下次循環(huán)又是從原始順序來(lái)刪除 
  print(out1) # 此時(shí)out1鏈表(list)即去重后的list 
  print(out_time) # 元素出現(xiàn)的次數(shù) 
  for j in range(len(out1)): # len()得到out1鏈表元素個(gè)數(shù),依此作為time[]查找下標(biāo) 
    out_row = [out1[j], out_time[j]]  # 取元素和對(duì)應(yīng)的次數(shù) 
    out_csv_writer.writerow(out_row) # 寫入out.csv文件里 
out_file.close() 

劃重點(diǎn)!這個(gè)代碼是經(jīng)過(guò)了去重處理后的,完全不用擔(dān)心會(huì)有重復(fù)數(shù)據(jù)顯示啦~

Python處理此類數(shù)據(jù)相當(dāng)快,大概一萬(wàn)行數(shù)據(jù)只需要1秒.......

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python動(dòng)刷新12306火車票的代碼(附源碼)

    Python動(dòng)刷新12306火車票的代碼(附源碼)

    這篇文章主要介紹了Python動(dòng)刷新12306火車票的完整代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-01-01
  • pandas將DataFrame的列變成行索引的方法

    pandas將DataFrame的列變成行索引的方法

    下面小編就為大家分享一篇pandas將DataFrame的列變成行索引的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 一文教你用python編寫Dijkstra算法進(jìn)行機(jī)器人路徑規(guī)劃

    一文教你用python編寫Dijkstra算法進(jìn)行機(jī)器人路徑規(guī)劃

    迪杰斯特拉(Dijkstra)算法是典型最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他節(jié)點(diǎn)的最短路徑,這篇文章主要給大家介紹了關(guān)于利用python編寫Dijkstra算法進(jìn)行機(jī)器人路徑規(guī)劃的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python標(biāo)準(zhǔn)庫(kù)itertools的使用方法

    Python標(biāo)準(zhǔn)庫(kù)itertools的使用方法

    本文匯總整理了Python標(biāo)準(zhǔn)庫(kù)itertools的使用方法,并提供簡(jiǎn)單應(yīng)用示例;如果還不能滿足你的要求,歡迎加入補(bǔ)充
    2020-01-01
  • Python參數(shù)類型以及常見(jiàn)的坑詳解

    Python參數(shù)類型以及常見(jiàn)的坑詳解

    這篇文章主要介紹了Python參數(shù)類型以及常見(jiàn)的坑詳解,由于之前遇到過(guò)幾次有關(guān)于參數(shù)類型的坑,以及經(jīng)常容易把一些參數(shù)類型搞混淆,現(xiàn)在做一下有關(guān)參數(shù)類型的總結(jié)記錄以及對(duì)之前踩坑經(jīng)歷的分析,需要的朋友可以參考下
    2019-07-07
  • Python Flask入門之模板

    Python Flask入門之模板

    今天小編就為大家分享一篇Python Flask模板的入門教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-11-11
  • python中threading超線程用法實(shí)例分析

    python中threading超線程用法實(shí)例分析

    這篇文章主要介紹了python中threading超線程用法,實(shí)例分析了Python中threading模塊的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • PyQt5利用QPainter繪制各種圖形的實(shí)例

    PyQt5利用QPainter繪制各種圖形的實(shí)例

    下面小編就為大家?guī)?lái)一篇PyQt5利用QPainter繪制各種圖形的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Python實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的分類

    Python實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的分類

    今天給大家整理了Python實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的分類的文章,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • python獲取指定時(shí)間段內(nèi)特定規(guī)律的日期列表

    python獲取指定時(shí)間段內(nèi)特定規(guī)律的日期列表

    這篇文章主要介紹了python獲取指定時(shí)間段內(nèi)特定規(guī)律的日期列表,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論