上一篇咱們講了怎麼用 json格式保存數據,這一篇咱們來看看如何用 csv模塊進行數據讀寫。python
CSV (Comma Separated Values),即逗號分隔值(也稱字符分隔值,由於分隔符能夠不是逗號),是一種經常使用的文本格式,用來存儲表格數據,包括數字或者字符。json
csv的使用很普遍,不少程序都會涉及到 csv的使用,可是 csv卻沒有通用的標準,因此在處理csv格式時經常會碰到麻煩。python爬蟲
所以在使用 csv時必定要遵循某一個標準,這不是固定的,但每一個人都應該有一套本身的標準,這樣在使用 csv時纔不會犯低級錯誤。編碼
關於 csv庫的使用,咱們從寫和讀兩個方面來說。spa
csv庫有四個主要的類 writer,DictWriter,reader,DictReadercode
reader和 DictReader都接受一個能夠逐行迭代的對象做爲參數,通常是一個包含 csv格式數據的文件對象。對象
writer和 DictWriter則接受一個 csv文件對象,csv格式的數據將會寫入到這個文件中。utf-8
他們都會返回一個對應的對象,咱們經過這個對象來進行數據的讀和寫。get
這四者中 reader和 writer對應,DictReader和 DictWriter對應,也就是說經過 writer類寫的 csv文件只能經過 reader類來讀取,DictReader同理。源碼
一、csv將數據寫入文件
#-*- coding: utf-8 -* import csv #經過 writer類寫入數據 #待寫入的數據 注意到兩個列表的元素個數不同 test_writer_data_1 = ['Tom', 'Cody', 'Zack'] test_writer_data_2 = ['Mike', 'Bill'] #建立並打開文件 with open('test_writer.csv', 'w', newline='', encoding='utf-8') as csvfile: #得到 writer對象 delimiter是分隔符 默認爲 "," writer = csv.writer(csvfile, delimiter=' ') #調用 writer的 writerow方法將 test_writer_data寫入 test_writer.csv文件 writer.writerow(test_writer_data_1) writer.writerow(test_writer_data_2) #經過 DictWriter類寫入數據 #待寫入的數據 注意到待寫入的數據類型爲 dict 且第二個字典沒有 lastname test_dict_writer_data_1 = {'firstname': 'Tom', 'lastname': 'Loya'} test_dict_writer_data_2 = {'firstname': 'Tom', 'lastname': 'Loya'} #建立並打開文件 with open('test_dict_writer.csv', 'w', newline='', encoding='utf-8') as csvfile: #設置表頭 fieldnames=['firstname', 'lastname'] # 得到 DictWriter對象 delimiter是分隔符 默認爲 "," 表頭爲 'firstname' 'lastname' dict_writer = csv.DictWriter(csvfile, delimiter=' ', fieldnames=fieldnames) #第一次寫入數據先寫入表頭 dict_writer.writeheader() #調用 DictWriter的 writerow方法將 test_dict_writer_data寫入 test_dict_writer.csv文件 dict_writer.writerow(test_dict_writer_data_1) dict_writer.writerow(test_dict_writer_data_2)
前面講到,csv沒有統一的標準,經過上面的例子咱們能夠發現,csv對寫入的數據不作任何檢查,也就是說幾乎沒有任何標準可言。
咱們發現 writerow方法不會對數據進行檢查,即便先後兩句 writerow語句寫入的數據的格式不一樣也不會報錯。
因此在用 csv寫入數據時要特別注意數據的格式問題!!!
也能夠用 writerows(list)
一次寫入多行,例如:
with open('test_writer.csv', 'w', newline='', encoding='utf-8') as csvfile: #得到 writer對象 delimiter是分隔符 默認爲 "," writer = csv.writer(csvfile, delimiter=' ') #調用 writer的 writerows方法將 test_writer_data寫入 test_writer.csv文件 writer.writerows([test_writer_data_1, test_writer_data_2]) with open('test_dict_writer.csv', 'w', newline='', encoding='utf-8') as csvfile: #設置表頭 fieldnames=['firstname', 'lastname'] # 得到 DictWriter對象 delimiter是分隔符 默認爲 "," 表頭爲 'firstname' 'lastname' dict_writer = csv.DictWriter(csvfile, delimiter=' ', fieldnames=fieldnames) #第一次寫入數據先寫入表頭 dict_writer.writeheader() #調用 DictWriter的 writerows方法將 test_dict_writer_data寫入 test_dict_writer.csv文件 dict_writer.writerows([test_dict_writer_data_1, test_dict_writer_data_2])
二、csv從文件讀取數據
#-*- coding: utf-8 -* import csv #經過 reader讀取文件內容 注意到以前咱們設置了 delimiter爲空格,這裏也要繼續設置爲空格 with open('test_writer.csv', 'r', newline='', encoding='utf-8') as csvfile: reader = csv.reader(csvfile, delimiter=' ') for row in reader: print(row) with open('test_dict_writer.csv', 'r', newline='', encoding='utf-8') as csvfile: dict_reader = csv.DictReader(csvfile, delimiter=' ') for row in dict_reader: print(row)
打印結果:
觀察打印出的結果咱們發現,reader讀取的內容打印出來後仍是列表格式,而 DictReader讀取的內容卻變爲了列表加元組的格式,顯然和咱們剛開時傳入的字典格式很不一樣。
而咱們老是但願輸入和輸出可以一致,可是 csv模塊並無提供這樣的方法,因此咱們須要本身將 csv模塊再進行一次封裝,封裝後的包應該知足下面的標準:
封裝後的包的源碼會在完成後貼出( ̄▽ ̄)"
最後讓咱們來總結一下使用 csv庫的注意事項:
以上就是 csv庫的使用方法和注意事項,以爲不錯就點個贊吧(●ˇ∀ˇ●)