python—CSV的读写

csv文件

CSV是一种以逗号分隔数值的文件类型,在数据库或电子表格中,常见的导入导出文件格式就是CSV格式,CSV格式存储数据通常以纯文本的方式存数数据表。
csv 库中有4个常用的对象:

csv.reader:以列表的形式返回读取的数据。
csv.writer:以列表的形式写入数据。
csv.DictReader:以字典的形式返回读取的数据。
csv.DictWriter:以字典的形式写入数据。

打开模式

写读追加状态
'r':读
'w':写
'a':追加
'r+' == r+w(可读可写,文件若不存在就报错(IOError))
'w+' == w+r(可读可写,文件若不存在就创建)
'a+' ==a+r(可追加可写,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就好啦:
'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'

1.写入数组类型数据

#encoding:utf-8
import csv

header=['class','name','sex','height','year']

rows=[

[1,'xiaoming','male',168,23],

[1,'xiaohong','female',162,22],

[2,'xiaozhang','female',158,21],

[2,'xiaoli','male',158,21]

]

with open('csvdir.csv','w',newline='',encoding='utf-8')as f:          #newline=" "是为了避免写入之后有空行

        ff=csv.writer(f)

        ff.writerow(header) # 写入一维数组

        ff.writerows(rows) # 写入二维数组

2.写入字典序列类型数据

在写入字典序列类型数据的时候,需要传入两个参数,一个是文件对象——f,一个是字段名称——fieldnames,到时候要写入表头的时候,只需要调用writerheader方法,写入一行字典系列数据调用writerrow方法,并传入相应字典参数,写入多行调用writerows

import csv

headers = ['class','name','sex','height','year']

rows = [

        {'class':1,'name':'xiaoming','sex':'male','height':168,'year':23},

        {'class':1,'name':'xiaohong','sex':'female','height':162,'year':22},

        {'class':2,'name':'xiaozhang','sex':'female','height':163,'year':21},

        {'class':2,'name':'xiaoli','sex':'male','height':158,'year':21},

    ]

with open('test2.csv','w',newline='',encoding='utf-8')as f:

      f_csv = csv.DictWriter(f,headers)

      f_csv.writeheader()

      f_csv.writerows(rows)

注意:列表和字典形式的数据写入是不一样的!!!!!!

3.csv的读取

读取前两行

# readCSV.py
# python 3.8
 
import csv
 
file = 'D:\\1.csv'
 
with open(file, encoding="UTF8") as f:    
	reader = csv.reader(f)        # 创建 读取器
	header_row = next(reader)     # 获取表的第一行(一般是列名)
	print(header_row)             # 打印
 
	first_row = next(reader)      # 获取标的第二行
	print(first_row)

读取所有行:

和读取文件差不多:

# readCSV.py
# python 3.8
 
import csv
 
file = 'D:\\1.csv'
 
with open(file, encoding="UTF8") as f:
	reader = csv.reader(f)        # 创建 读取器
	header_row = next(reader)     # 获取表的第一行(一般是列名)
	print(header_row)             # 打印
 
    for row in reader:            # 循环得到后面的所有数据
        print(row)

其实,这个 reader 是个迭代器,其自身包含了一个指向当前数据位置的指针(非C语言指针,而是有点像生活中的手表表盘指针)。你对它调用一次 next(reader),其内部的指针就移到下一行。

参考:

posted @   HaimaBlog  阅读(443)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2020-11-10 docker 安装 kafka+zookeeper,golang操作kafka
2020-11-10 VMware安装Centos7超详细过程(图文)
2019-11-10 安装echo框架
2019-11-10 gin框架博客实战教程2019web页面开发go语言实战博客开发
点击右上角即可分享
微信分享提示