Python 之csv文件处理成pytest.mark.parametrize() 参数化所需格式

文件:

csv_data.csv

 

读取:

主要用open方法和csv库的reader() 方法,读取到所有行,然后去循环打印/读取每一行

然后根据自己需求对读取的数据进行下一步处理

import csv
import os


# 定义一个工具类
class Utils:
    """
    csv文件处理:本方法是为了适应pytest的参数化所需要的数据格式,后面会对读取数据进行处理
    pytest.mark.parametrize() :参数化所需格式为:[(),(),()]
    """
    # 定义一个初始化方法,主要获取到存放csv文件的目录的绝对路径
    def __init__(self):
        self.file_path = 
                        os.path.join(os.path.dirname(os.path.dirname(__file__)),'testdata')          

    # 定义一个csv文件的读取方法,传csv文件的文件名即可
    def read_csv(self,csv_data):
        # 定义一个空列表,用于存放读取后的数据
        test_data = []
        # 拼接路径,这里利用文件名可以自动匹配数据目录下的csv文件的绝对路径
        data_path = os.path.join(self.file_path,csv_data)
        # 打开csv文件,模式为可读,编码为utf8
        with open(data_path,mode='r',encoding='utf8') as f:
            row = csv.reader(f)
            # next()方法去掉第一行,第一行往往为数据标题
            next(row)
            # 循环每一行,
            for line in row:
                # 这里打印出来的既是读取的每一行,即所需要的数据
                print(line)
                       
                # 这里为适应pytest参数化而做的格式变化
                test_data.append(tuple(line))
        # 关闭文件
        f.close()

        return test_data


# 测试
if __name__ == '__main__':
    ut = Utils()
    r = ut.read_csv('csv_data.csv')
    print(r)

运行:

写入:

主要用open方法和csv库的writerow() 方法,写入每一行

import csv


row = ['David', 'MCE', '3', '7.8']

row1 = ['Lisa', 'PIE', '3', '9.1']

row2 = ['Raymond', 'ECE', '2', '8.5']

row3 = ['Bob', 'ECE', '5', '8.5']

row4 = ['Tom', 'ECE', '3', '6.5']

# mode= a 表示追加写入
with open(file='student.csv', mode='a',encoding='utf8') as f:
    writer = csv.writer(f)
    # 单行写入
    writer.writerow(row)
    # 单行写入
    writer.writerow(row1)
    # 单行写入
    writer.writerow(row2)
    # 多行写入
    writer.writerows([row3,row4])

f.close()

运行:

附加:
python利用open打开文件的方式:

w:以写方式打开, 
a:以追加模式打开 (从 EOF 开始, 必要时创建新文件) 
r+:以读写模式打开 
w+:以读写模式打开 (参见 w ) 
a+:以读写模式打开 (参见 a ) 
rb:以二进制读模式打开 
wb:以二进制写模式打开 (参见 w ) 
ab:以二进制追加模式打开 (参见 a ) 
rb+:以二进制读写模式打开 (参见 r+ ) 
wb+:以二进制读写模式打开 (参见 w+ ) 
ab+:以二进制读写模式打开 (参见 a+ )
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值