天天看點

python 資料分析基礎一:csv檔案處理(1.5)

上一篇文章,簡單說了基礎python對csv檔案的一些最基本的引用于操作。

本篇作者重點放在了判斷行中的值比對某種模式或者正規表達式

篩選csv檔案中特定的行

1.利用基礎python

判斷行中的值屬于某一個集合

那麼我們依然使用第一篇的csv模闆:沒有模闆的小夥伴,可以去這裡下載下傳

傳送門

python 資料分析基礎一:csv檔案處理(1.5)

代碼:

#行中的值屬于某一集合,基礎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檔案。

  1. 建立一個"the_first_csv.csv"的csv檔案,使用with open的用法打開我們的模闆和需要寫入的檔案(with open…是比較簡單的基礎python讀取檔案的方法,這裡不做詳解)
  2. 接着,我們建立讀取對象與寫入對象。這裡我們利用 csv子產品的reader函數與writer函數,非常友善,我們需要注意需要引入該子產品,也就是import csv,這兩個函數的用法也很簡單

    reader函數:readobject=csv.reader(“filename”)

    writer函數: writeobject=csv.writer(“filename”)

  3. 那麼接下來我們要着重一點的是,reader函數的傳回值
    python 資料分析基礎一:csv檔案處理(1.5)
    其實第一行的輸出,是一個疊代類型,後面的數是十六進制數,我的了解是它的位址,當然不對的大家可以指正,不過暫時這樣了解應該可以。我們将它轉化為清單輸出的話,可以看到reader函數傳回的是一個清單的疊代的位址那麼我們引用的時候,其實是引用了一系列清單,而這個一系列清單的第一個段清單是表頭的屬性分類,我們自然是不能用這第一行的屬性分類去判斷的,是以我們先把第一行清單(也就是第一個疊代對象)寫入我們的目标檔案中。這時候我們要使用一個函數 csv.next() 函數,我們第一次使用它是傳回第一個疊代對象,它的作用其實就是擷取下一個對象。詳解傳送門(菜鳥教程)。
  4. 那麼我們先行把第一個對象寫入目标檔案,繼而使用for循環去周遊這個對象。那麼先前我們已經說過,啊,它每一個對象都是一個清單,那麼我們使用索引來判斷是沒有任何問題的,我們可以在剛開始的date_list中任意添加時間(用于篩選)
    python 資料分析基礎一:csv檔案處理(1.5)

    (本人畫筆簡陋,說出來都是淚)那麼索引我們也已經标記出來了,我們要用日期來判斷的話,便是索引4。如果符合,我們便使用writerow函數寫入目标檔案。

    拓展

writerow()函數:寫入一行,參量為清單write_object.writerow([list])

writerows()函數:寫入多行,參量為一系列清單(list1,list2)

這些内容大概已經足夠大家去使用基礎python去篩選行内容。

下一篇将講到使用pandas子產品友善處理行比對問題。

武漢加油