上一篇文章,簡單說了基礎python對csv檔案的一些最基本的引用于操作。
本篇作者重點放在了判斷行中的值比對某種模式或者正規表達式
篩選csv檔案中特定的行
1.利用基礎python
判斷行中的值屬于某一個集合
那麼我們依然使用第一篇的csv模闆:沒有模闆的小夥伴,可以去這裡下載下傳
傳送門
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL51EVNBTQE9UMRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwUjMwMTNyQTMyEjMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
代碼:
#行中的值屬于某一集合,基礎python 使用基本python 使行中的值屬于某個集合
import csv
date_list=['1/20/14']
input_file="supplier_data.csv"
output_file="the_first_csv.csv"
with open(input_file,"r",newline="") as filereader:
with open(output_file,"w",newline="") as filewriter:
fileread=csv.reader(filereader)#建立讀取對象
filewrite=csv.writer(filewriter)#建立寫入對象
header=next(fileread)#取表頭
filewrite.writerow(header)#寫入表頭
for row_list in fileread:
a_date=row_list[4]
if a_date in date_list:
filewrite.writerow(row_list)
如第一行所示,這段代碼的作用是提取出,行中的值屬于某個集合的一部分csv檔案。
- 建立一個"the_first_csv.csv"的csv檔案,使用with open的用法打開我們的模闆和需要寫入的檔案(with open…是比較簡單的基礎python讀取檔案的方法,這裡不做詳解)
-
接着,我們建立讀取對象與寫入對象。這裡我們利用 csv子產品的reader函數與writer函數,非常友善,我們需要注意需要引入該子產品,也就是import csv,這兩個函數的用法也很簡單
reader函數:readobject=csv.reader(“filename”)
writer函數: writeobject=csv.writer(“filename”)
- 那麼接下來我們要着重一點的是,reader函數的傳回值 其實第一行的輸出,是一個疊代類型,後面的數是十六進制數,我的了解是它的位址,當然不對的大家可以指正,不過暫時這樣了解應該可以。我們将它轉化為清單輸出的話,可以看到reader函數傳回的是一個清單的疊代的位址那麼我們引用的時候,其實是引用了一系列清單,而這個一系列清單的第一個段清單是表頭的屬性分類,我們自然是不能用這第一行的屬性分類去判斷的,是以我們先把第一行清單(也就是第一個疊代對象)寫入我們的目标檔案中。這時候我們要使用一個函數 csv.next() 函數,我們第一次使用它是傳回第一個疊代對象,它的作用其實就是擷取下一個對象。詳解傳送門(菜鳥教程)。
python 資料分析基礎一:csv檔案處理(1.5) - 那麼我們先行把第一個對象寫入目标檔案,繼而使用for循環去周遊這個對象。那麼先前我們已經說過,啊,它每一個對象都是一個清單,那麼我們使用索引來判斷是沒有任何問題的,我們可以在剛開始的date_list中任意添加時間(用于篩選)
python 資料分析基礎一:csv檔案處理(1.5) (本人畫筆簡陋,說出來都是淚)那麼索引我們也已經标記出來了,我們要用日期來判斷的話,便是索引4。如果符合,我們便使用writerow函數寫入目标檔案。
拓展
writerow()函數:寫入一行,參量為清單write_object.writerow([list])
writerows()函數:寫入多行,參量為一系列清單(list1,list2)
這些内容大概已經足夠大家去使用基礎python去篩選行内容。