码迷,mamicode.com
首页 > 编程语言 > 详细

python杂记-处理CSV文件

时间:2020-06-30 13:03:29      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:下标   读取   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)

 

python杂记-处理CSV文件

标签:下标   读取   row   enc   xxx   iter   exce   str   字典序   

原文地址:https://www.cnblogs.com/RuiRuia/p/13212804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!