溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python中怎么批量查詢CSV文件

發(fā)布時間:2021-06-17 14:43:02 來源:億速云 閱讀:172 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)python中怎么批量查詢CSV文件,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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

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

因為是批量處理嘛~所以寫的是所有數(shù)據(jù)重復(fù)出現(xiàn)的次數(shù)(但這個有點BUG,可能看完代碼就知道了,沒有去重?。。∨e個例子說a出現(xiàn)在第一行和第三行共2次,結(jié)果出來后就是第一行出現(xiàn)a,對應(yīng)次數(shù)為2,第三行又出現(xiàn)a,對應(yīng)次數(shù)也是2....這就是沒有去重的麻煩之處,重復(fù)的數(shù)據(jù)會再次顯示。)。但稍微修改一下可實現(xiàn)搜索某一數(shù)據(jù)出現(xiàn)的次數(shù)啦~

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

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

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

上述就是小編為大家分享的python中怎么批量查詢CSV文件了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI