• 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)
  • 相关阅读:
    springboot定时任务框架Quartz
    Linux中安装Erlang
    prometheus常用函数详解
    Prometheus+Grafana+SpringBoot业务埋点可视化监控
    Prometheus+Grafana可视化监控SpringBoot项目
    prometheus的数据类型介绍
    DS:顺序栈
    DS:顺序队列
    Linux:06进程
    primer5:chap09顺序容器
  • 原文地址:https://www.cnblogs.com/RuiRuia/p/13212804.html
Copyright © 2020-2023  润新知