zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    假如我国国民生产总值的年增长率为7%, 计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为$p = (1+r)^n$ ,其中r为年增长率,n为年数,p为与现在相比的倍数
    不定积分40例
    docker容器
    Kubernetes搭建
    windows提权之mimikatz
    NodeJS沙箱逃逸&&vm
    jwt攻击手段
    yii2邮件配置教程,报Expected response code 250 but got code "553"原因
    git 撤销,放弃本地修改
    动态规划(含最短路径和正则匹配例子)
  • 原文地址:https://www.cnblogs.com/RuiRuia/p/13212804.html
Copyright © 2011-2022 走看看