Python玩轉CSV

一、CSV的特點

  1. 逗號分割值文件格式,其文本以純文本形式存儲表格數據。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。比如數據庫中有 intintintegerinteger 類型數據,這是候往往在程序中需要區別於字符串類型對待,有時候在處理大量數據的時候很麻煩,很多人選擇將數字也看作字符串,這時候CSVCSV就很有優勢。
  2. CSVCSV文件由任意數目記錄實例組成,記錄實例間以某種換行符分隔。CSVCSV文件沒有兼容性的要求,即如WordWord類型文件無法用ExcelExcel打開,相反也是,而且WordWord類型文件在WPSWPSMicrosoftofficeMicrosoft office中打開是不同的,更甚之,不同發行版本的WordWordExcelExcel文件用不同版本的officeoffice打開用也會有問題,爲了處理一些結構化的數據實例文本CSVCSV應運而生,它可以無視兼容性和wordwordexcelexcel文件類型和版本打開,因爲它只是文本文件。
  3. 打開工具:記事本或其他包含記事本編輯功能的軟件,如sublime,notepad++。
  4. 規則:
    在這裏插入圖片描述
1. 以行爲單位,開頭不留空行;
2. 可含或不含列名,含列名則居文件第一行;
3. 一行數據不跨行,無空行;
4. 以半角逗號(英文輸入法)作爲分隔符。

二、數據驅動測試

數據驅動測試是自動化測試框架的其中之一。
相同的測試腳本給不同的測試數據去執行,測試的數據和測試行爲完全分離了,這樣的測試腳本設計模式就稱爲數據驅動測試。
與excel文件不同,csv文件中:

  1. 數據都沒有數據類型,值都是字符串;
  2. 沒有顏色和樣式,不能指定單元格的寬高,不能合併單元格;
  3. 沒有多個工作表;
  4. 不能嵌入圖像圖表。

三、CSV的讀寫

3.1 寫入CSV文件

3.1.1 用列表格式寫入

用兩個列表:表頭列表headersheaders和實例列表rowsrows

import csv

headers = ['user','password']
rows = [['zyx','123'],["張先生",'000'],['張123','','123'],['a','b','']]
with open('count.csv','w') as f:
    csv_writer = csv.writer(f)# 生成一個csv的寫對象
    csv_writer.writerow(headers)# 寫入列表頭一行用writerow
    csv_writer.writerows(rows)# 寫入多行實例行用writerows

在這裏插入圖片描述
上面的結果對csv文件來說是錯的,因爲有空行。如果打開csv文件出現空行的情況,那麼打開文件時需要添加一個參數 newline=newline='',即withopen(count.csv,w,newline=)asf:with open('count.csv','w',newline='') as f:windowswindows中有這個問題,linuxlinux中沒有這個問題,應該是換行機制的問題。

修改後結果:
在這裏插入圖片描述

3.1.2 用字典格式寫入

import csv

headers = ['user','password']
# rows = [['zyx','123'],["張先生",'000'],['張123','','123'],['a','b','']]
rows = [
    {'user':'zyx','password':'123'},
    {'user':"張先生",'password':'000'},
    {'user':'張123','password':'123'},
    # {'user':'c','password':'c','非空':''},
    # {'user': 'a', 'password': 'b', '': '', '非空': ''},
]
with open('count.csv','w',newline='') as f:
    csv_writer = csv.DictWriter(f,headers)# 生成一個csv的字典寫對象,並插入表單頭
    csv_writer.writeheader()
    csv_writer.writerows(rows)# 寫入多行實例行用writerows

對於字典格式寫入有一個問題,如果writerows(rows)rowswriterows(rows),rows列表中的字典如果有非headersheaders中指定的keykey即如{user:a,password:b,:,:},\{'user': 'a', 'password': 'b', '': '', '非空': ''\},就會報錯:ValueError:dictcontainsfieldsnotinfieldnames:,ValueError: dict contains fields not in fieldnames: '', '非空'與上面列表方式相比,優勢就是更加嚴格,降低數據的錯誤率。
運行結果:
在這裏插入圖片描述

3.2.1 csv文件的讀

with open('count.csv','r') as f:
    csv_reader = csv.reader(f)
    print(csv_reader)
    print('打印csv所有內容')
    for row in csv_reader:
        print(row)

運行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章