标签:下标 读取 row enc xxx iter exce str 字典序
如有一CSV表格:
usernaname |
password |
except_val |
user1 |
123456 |
登录成功 |
user1 |
_ |
密码不能为空 |
_ |
123456 |
用户名不能为空 |
xxxx |
xxxx |
用户名或密码有误 |
读取CSV文件
读取csv文件数据为一个元组的序列
1 import csv 2 3 with open(‘./data.csv‘,encoding=‘utf8‘,mode=‘r‘) as f: 4 csvdata = csv.reader(f) 5 header = next(csvdata) # 获取hearder 6 print(header) 7 for row in csvdata: # 打印出每一行内容 8 print(row) 9 10 #输出 11 [‘username‘, ‘password‘, ‘except_val‘] 12 [‘user1‘, ‘123456‘, ‘登录成功‘] 13 [‘user1‘, ‘‘, ‘密码不能为空‘] 14 [‘‘, ‘123456‘, ‘用户名不能为空‘] 15 [‘xxxx‘, ‘xxxx‘, ‘用户名或密码有误‘]
在上面的代码中, row 会是一个列表。因此,为了访问某个字段,你需要使用下标,如 row[0] 访问用户名, row[1] 访问密码。
由于这种下标访问通常会引起混淆,你可以考虑使用命名元组。例如:
1 from collections import namedtuple 2 import csv 3 4 with open(‘./data.csv‘,encoding=‘utf8‘,mode=‘r‘) as f: 5 csvdata = csv.reader(f) 6 header = next(csvdata) 7 Row = namedtuple("Row",header) 8 for r in csvdata: 9 row =Row(*r) 10 print(row) 11 12 #输出 13 Row(username=‘user1‘, password=‘123456‘, except_val=‘登录成功‘) 14 Row(username=‘user1‘, password=‘‘, except_val=‘密码不能为空‘) 15 Row(username=‘‘, password=‘123456‘, except_val=‘用户名不能为空‘) 16 Row(username=‘xxxx‘, password=‘xxxx‘, except_val=‘用户名或密码有误‘)
它允许你使用列名如 row.username 和 row.password 代替下标访问。需要注意的是这个只有在列名是合法的Python标识符的时候才生效。如果不是的话, 你可能需要修改下原始的列名(如将非标识符字符替换成下划线之类的)。
另外一个选择就是将数据读取到一个字典序列中去
1 import csv 2 3 with open(‘./data.csv‘,encoding=‘utf8‘,mode=‘r‘) as f: 4 f_data = csv.DictReader(f) 5 for row in f_data: # 打印出每一行内容 6 print(row)
在这个版本中,你可以使用列名去访问每一行的数据了。比如,row[‘username‘] 或者 row[‘password‘]
写入CSV文件
1 import csv 2 headers =[‘username‘, ‘password‘, ‘except_val‘] 3 rows =[(‘user1‘, ‘123456‘, ‘登录成功‘),(‘user1‘, ‘‘, ‘密码不能为空‘),(‘‘, ‘123456‘, ‘用户名不能为空‘),(‘xxxx‘, ‘xxxx‘, ‘用户名或密码有误‘)] 4 with open(‘data.csv‘,encoding=‘utf8‘, mode=‘w‘,newline=‘‘) as f: 5 f_csv = csv.writer(f) 6 f_csv.writerow(headers) 7 f_csv.writerows(rows)
如果待写入的是字典序列
1 import csv 2 headers =[‘username‘, ‘password‘, ‘except_val‘] 3 rows=[{"username":"user1","password":"123456","except_val":"登录成功"}, 4 {"username":"user1","password":"","except_val":"密码不能为空"}, 5 {"username":"","password":"123456","except_val":"用户名不能为空"}, 6 {"username":"xxxxx","password":"xxxx","except_val":"用户名或密码有误"}] 7 8 with open(‘data.csv‘,encoding=‘utf8‘, mode=‘w‘,newline=‘‘) as f: 9 f_csv = csv.DictWriter(f,headers) 10 f_csv.writeheader() 11 f_csv.writerows(rows)
标签:下标 读取 row enc xxx iter exce str 字典序
原文地址:https://www.cnblogs.com/RuiRuia/p/13212804.html