文件:
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+ )