python学习杂记-处理CSV文件

如有一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)
原文地址:https://www.cnblogs.com/RuiRuia/p/13212804.html