python学习笔记 - 读写CSV文件

本文详细介绍了Python中使用csv模块以列表和字典为单位读写CSV文件的方法,包括reader、writer、DictReader和DictWriter的使用,强调了打开文件时的参数设置和遍历数据的方式,提供了具体的代码示例。
摘要由CSDN通过智能技术生成

1、前言


1.1、CSV简介

CSV的英文全称为:Comma-Separated Values,翻译过来就是:用逗号分隔的值。时至今日,CSV已经不限于仅仅支持以逗号去分隔数据。那么CSV文件中的数据都是以什么样的方式存储的呢:

  • csv文件以纯文本的形式去存储表格数据。
  • csv文件由任意数目的记录组成,通常,所有记录都有完全相同的字段序列。记录之间以某种换行符分隔,如:’\n’
  • csv中的每条记录由多个字段组成,每个字段之间以某种分隔符分隔,常见如:,| 制表符

CSV文件为纯文本文件,建议使用记事本来开启,其中使用逗号分隔每条记录中的字段:
在这里插入图片描述
或者,也可以另存新档后用Excel开启:
在这里插入图片描述
python三方库提供了csv库,我们需要通过这个库,来实现对CSV文件的读与写。所以我们在应用csv库之前,需要提前安装它。

# win:
pip install csv
# mac
pip3 install csv
# 若提示下载超时,则用以下的方式安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple csv

注意,本文的案例因为大多都是案例片段,最终显示的代码都没有关闭文档对象,在实际的运用中切记要关闭,或者使用with open as的方式打开。

1.2、CSV文件读写方式分类

csv库提供了两种读写csv文件的方式:以列表为单位读写csv文件以字典为单位读写csv文件

  • 以列表为单位读写csv文件:csv文件中的每条记录以列表为单位呈现或操作。
  • 以字典为单位读写csv文件:csv文件中的每条记录以字典为单位呈现或操作。


2、以列表为单位读写CSV文件


在1.1简介中,我们打开csv文件后发现,csv文件的数据中的每行数据都有这相同的字段序列,分别以姓名,语文,数学,英语的顺序排列组成每条记录。python中,我们可以用列表模拟csv文件中的每条数据关系。列表的有序性,可以很方便的表达或存储csv文件中的每条记录。我们可以通过列表的这个特性,去完成对csv文件的读写操作。

2.1、以列表为单位读取CSV文件(reader)

2.1.1、生成CSV文件读取对象

csv模块下提供了reader方法,用于生成一个可以方便用户读取csv文件的对象。我们先来看看这个接口的定义:

def reader(iterable, dialect='excel', *args, **kwargs):
    """
    ...
    The "iterable" argument can be any object that returns a line
    of input for each iteration, such as a file object or a list.
    ...
    """

我们从该接口对iterable参数的描述可知:

参数 类型 说明
iterable 可迭代对象(如列表)、文件对象 该参数可以赋一个可迭代对象,也可以赋一个文件对象。

我们需要操作csv文件,所以显然此处我们需要给iterable参数传递一个文件对象。即我们平时用到的open打开的文件。首先open中的参数newline必须赋值为’’,即newline=’’;其次,若编码集参数encoding期望值为utf-8,最好写成utf-8-sig,即encoding=‘utf-8-sig’。这样可以避免第一个获取到的值存在一段未解码的字符串;最后,既然是读取类,我们在使用open打开csv文件的时候当然需要以“读”的方式去打开。比如我们需要打开一个测试数据.csv,并生成一个csv读对象

csv_file = open('./测试数据.csv', 'r', encoding='utf-8-sig', newline='')
csv_reader = csv.reader(csv_file)

2.1.2、读取CSV文件

获取到csv读取对象后,我们就可以通过csv读取对象读取csv文件中的内容,csv文件读取对象是一个可遍历的对象,我们可以通过for循环遍历的方式,去获取csv文件中的数据:

for row in csv_reader:
    print(type(row))  # <class 'list'>
    print(row)  # ['姓名', '语文', '数学', '英语'] ...

可以看到,每轮遍历都会获取一个列表,该列表中的元素就是遍历行的各个字段值。

2.2、以列表为单位写入CSV文件(writer)

2.2.1、生成CSV文件写入对象

csv模块下提供了writer方法,用于生成一个可以写入csv文件的对象。我们先来看看这个接口的定义:

def writer(fileobj, dialect='excel', *args, **kwargs):
    """
    ...
	The "fileobj" argument can be any object that supports the file API.
	...
    """

在此处,fileobj对象似乎跟读文件限制不同,但是我们需要将数据写入csv文件中,所以此处fileobj还是一个以“写”的方式打开的文件。生成csv文件写入对象的方法如下:

csv_file = open('./测试数据.csv', 'w', encoding='utf-8-sig', newline='')
csv_writer = csv.writer(csv_file)

2.2.2、写入CSV文件

csv文件写入对象提供了单条记录写入(writerow)与多条记录同时写入(writerows)的方法,大大的便捷了我们去写入csv文件。(我的python环境为3.9)

class _writer:
    dialect: Dialect
    if sys.version_info >= (3, 5):
        def writerow
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值