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)
  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/RuiRuia/p/13212804.html
Copyright © 2011-2022 走看看