Python基础教程

014_Python读写csv文件

Python读写csv文件

表格操作中最主要的是行与列的控制。

Python解析csv是逐行处理,行内形式有两种,一种是此行各列元素构成列表list,另一种是此行与表头构成字典dict。

csv是什么格式

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。csv 格式是电子表格和数据库中最常见的输入、输出文件格式。

csv数据是表格数据(不是键值对),可以由excel导出生成。

文本文件student.csv数据如下。

number,name,age
1,zhangsan,18
2,wangwu,17
3,xiaofang,17
4,tiantian,18

Python读写csv主要方法

Python标准库中csv模块提供了csv格式操作函数。常见操作函数,如下。

  • 读取(行是list):csv.reader()
  • 写入(行是list):csv.writer()
  • 读取(行是dict):csv.DictReader()
  • 写入(行是dict):csv.DictWriter()

Python读取csv

读取csv(行是list)示例如下。

import csv

with open("student.csv","r") as f:   # 打开文本,模式为读
    rd=csv.reader(f)                 # 获取一处行处理迭代器
    for row in rd:
        print(row)                   # 获取每行信息
        print(row[2])                # 获取第3列信息,下标从0开始计算

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/atestpkg/t18.py
['number', 'name', 'age']
age
['1', 'zhangsan', '18']
18
['2', 'wangwu', '17']
17
['3', 'xiaofang', '17']
17
['4', 'tiantian', '18']
18

Process finished with exit code 0

读取csv(行是dict)示例如下。

import csv

with open("student.csv","r") as f:
    rd=csv.DictReader(f)
    for row in rd:
        print(type(row))
        print(row)                  # 每行是一个字典
        print(row["name"],row["age"])           # 通过列名称获取数据

运行结果

C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/atestpkg/t19.py
<class 'collections.OrderedDict'>
OrderedDict([('number', '1'), ('name', 'zhangsan'), ('age', '18')])
zhangsan 18
<class 'collections.OrderedDict'>
OrderedDict([('number', '2'), ('name', 'wangwu'), ('age', '17')])
wangwu 17
<class 'collections.OrderedDict'>
OrderedDict([('number', '3'), ('name', 'xiaofang'), ('age', '17')])
xiaofang 17
<class 'collections.OrderedDict'>
OrderedDict([('number', '4'), ('name', 'tiantian'), ('age', '18')])
tiantian 18

Process finished with exit code 0

Python写入csv

写入csv文件示例如下

import csv

# 定义一行数据,list形式
arow=["5","yuanyuan","18"]

# 打开文件时需要控制换行参数,设置newline=''则不插入空行
with open("student.csv","a",newline='') as f:
    wd=csv.writer(f,dialect="excel")
    wd.writerow(arow)                           # 写入一行,添加

# 定义一行数据,dict形式
arow2={
    "number":"6",
    "name":"xuanxuan",
    "age":"17"
}

# 打开文件,添加模式
with open('student.csv', 'a', newline='') as csvfile:
    fieldnames = ["number","name","age"]       # 列名需要定义并指定给后面的参数fieldnames=
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writerow(arow2)                     # 写入一行,添加

程序运行之后,student.csv数据添加了两条。

number,name,age
1,zhangsan,18
2,wangwu,17
3,xiaofang,17
4,tiantian,18
5,yuanyuan,18
6,xuanxuan,17
这篇文章对您有用吗?

我们要如何帮助您?