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)

运行结果:
在这里插入图片描述

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