一、CSV的特点
- 逗号分割值文件格式,其文本以纯文本形式存储表格数据。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。比如数据库中有 或 类型数据,这是候往往在程序中需要区别于字符串类型对待,有时候在处理大量数据的时候很麻烦,很多人选择将数字也看作字符串,这时候就很有优势。
- 文件由任意数目记录实例组成,记录实例间以某种换行符分隔。文件没有兼容性的要求,即如类型文件无法用打开,相反也是,而且类型文件在和中打开是不同的,更甚之,不同发行版本的和文件用不同版本的打开用也会有问题,为了处理一些结构化的数据实例文本应运而生,它可以无视兼容性和和文件类型和版本打开,因为它只是文本文件。
- 打开工具:记事本或其他包含记事本编辑功能的软件,如sublime,notepad++。
- 规则:
1. 以行为单位,开头不留空行;
2. 可含或不含列名,含列名则居文件第一行;
3. 一行数据不跨行,无空行;
4. 以半角逗号(英文输入法)作为分隔符。
二、数据驱动测试
数据驱动测试是自动化测试框架的其中之一。
相同的测试脚本给不同的测试数据去执行,测试的数据和测试行为完全分离了,这样的测试脚本设计模式就称为数据驱动测试。
与excel文件不同,csv文件中:
- 数据都没有数据类型,值都是字符串;
- 没有颜色和样式,不能指定单元格的宽高,不能合并单元格;
- 没有多个工作表;
- 不能嵌入图像图表。
三、CSV的读写
3.1 写入CSV文件
3.1.1 用列表格式写入
用两个列表:表头列表和实例列表。
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文件出现空行的情况,那么打开文件时需要添加一个参数 ,即。中有这个问题,中没有这个问题,应该是换行机制的问题。
修改后结果:
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
对于字典格式写入有一个问题,如果列表中的字典如果有非中指定的即如就会报错:与上面列表方式相比,优势就是更加严格,降低数据的错误率。
运行结果:
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)
运行结果: