目录
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