python中内置库csv的使用及说明

 更新时间:2022年11月29日 16:31:47   作者:玉米丛里吃过亏  
这篇文章主要介绍了python中内置库csv的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

所谓的CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式。

尝试使用CSV格式进行标准化描述之前已经使用了很多年。

该csv模块reader和writer对象读取和写入序列。

程序员还可以使用DictReader和DictWriter类以字典形式读取和写入数据。

读取

reader(iterable, dialect=‘excel', *args, **kwargs)

该方法返回一个reader对象,该对象将遍历给定的iterable中的行。默认情况下,从csv文件中读取的每一行都作为字符串列表返回,除非指定了quoting参数值为QUOTE_NONNUMERIC。如下:

假设有这么一个文件a.csv,内容如下:

1,2,3,4
5,6,7,8
9,10,11,12

我们读取一下这个csv

import csv

with open('a.csv') as f:
    reader = csv.reader(f)
    print(type(reader), reader)
    for item in reader:
        print(type(item), item)
        
############# 打印结果如下 #############
<class '_csv.reader'> <_csv.reader object at 0x000002194D601F50>
<class 'list'> ['1', '2', '3', '4']
<class 'list'> ['5', '6', '7', '8']
<class 'list'> ['9', '10', '11', '12']

当我们设置quoting参数值为QUOTE_NONNUMERIC时:

with open('a.csv') as f:
    reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
    print(type(reader), reader)
    for item in reader:
        print(type(item), item)
        
############# 打印结果如下 #############
<class '_csv.reader'> <_csv.reader object at 0x000002BFC3291F50>
<class 'list'> [1.0, 2.0, 3.0, 4.0]
<class 'list'> [5.0, 6.0, 7.0, 8.0]
<class 'list'> [9.0, 10.0, 11.0, 12.0]

更多参数解释请看下面kwargs参数

DictReader(f, fieldnames=None, restkey=None, restval=None, dialect=“excel”, *args, **kwds)

创建一个DictReader对象,其功能类似于常规读取器,但是将每行的信息映射到OrderDict当中。

OrderDict的键名可由filednames参数指定,如果未指定,那么将由第一行数据作为键名;如果数据中的字段多于字段名列表,则剩余的数据以列表存储起来,其健名由restkey指定(默认为None);如果数据中的值少于字段名列表,则缺少的值将默认填充为restval设定的值(默认为None)。

with open('a.csv') as f:
    reader = csv.DictReader(f)
    print(type(reader), reader)
    for item in reader:
        print(type(item), item)

############# 打印结果如下 #############
<class 'csv.DictReader'> <csv.DictReader object at 0x000001F3EE9A8898>
<class 'collections.OrderedDict'> OrderedDict([('1', '5'), ('2', '6'), ('3', '7'), ('4', '8')])
<class 'collections.OrderedDict'> OrderedDict([('1', '9'), ('2', '10'), ('3', '11'), ('4', '12')])

设置了fieldnames情况下:

...
reader = csv.DictReader(f, fieldnames=['a', 'b', 'c', 'd'])
...

############# 打印结果如下 #############
<class 'csv.DictReader'> <csv.DictReader object at 0x00000249BED38898>
<class 'collections.OrderedDict'> OrderedDict([('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')])
<class 'collections.OrderedDict'> OrderedDict([('a', '5'), ('b', '6'), ('c', '7'), ('d', '8')])
<class 'collections.OrderedDict'> OrderedDict([('a', '9'), ('b', '10'), ('c', '11'), ('d', '12')])

无论是reader对象还是DictReader对象,都具有如下操作:

  • __next__(): 将阅读器可迭代对象的下一行作为列表或字典返回
  • dialect: 获取阅读器的dialect描述
  • line_num: 获取阅读器读取的行数
  • fieldnames: 获取键名(DictReader对象独有)

更多参数解释请看下面kwargs参数

写入

writer(fileobj, dialect=‘excel', *args, **kwargs)

将用户数据写入到指定的文件对象上,返回一个writer对象

import csv

# 一定要指定newline='', 否则将会每行数据之间将会有空行
with open('b.csv', mode='w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow([1, 2, 3, 4])
    writer.writerow([5, 6, 7, 8])

更多参数解释请看下面kwargs参数

DictWriter(f, fieldnames, restval="", extrasaction=“raise”, dialect=“excel”, *args, **kwds)

将用户数据写入到指定文件对象上,但需指定fieldnames(键名),返回一个DictWriter对象。

如果数据中的值少于字段名列表,则缺少的值将默认填充为restval设定的值(默认为None)。

import csv

# 一定要指定newline='', 否则将会每行数据之间将会有空行
with open('b.csv', mode='w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=['a', 'b', 'c', 'd'])
    writer.writerow({'a': 1, 'b': 2, 'c': 3, 'd': 4})
    writer.writerow({'a': 5, 'b': 6, 'c': 7, 'd': 8})

值得注意的是,默认情况下fieldnames数据并不会写入到文件当中!

无论是reader对象还是DictReader对象,都具有如下操作:

writerow(rowdict): 将行数据写入到文件对象
writerows(rowdicts): 所有行数据写入到文件对象当中
import csv
with open('b.csv', mode='w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows([[1, 2, 3, 4], [5, 6, 7, 8]])
  • dialect: 获取写入器的dialect描述
  • writeheader(): 用fieldnames数据写入一行(DictWriter对象独有)

更多参数解释请看下面kwargs参数

kwargs参数

  • delimiter

一个用于分割字段的分隔符,默认为,

  • lineterminator

行终止符,默认为\r\n

  • quoting

控制何时引用应该由作者产生并被读者识别

  • skipinitialspace

如果设置为True,分割符后面的空白将被忽略。默认为False

"""
假设a.csv的内容如下
1, 2,3,4
"""

import csv
with open('a.csv') as f:
    reader = csv.reader(f)
    # reader = csv.reader(f, skipinitialspace=True)
    for item in reader:
        print(type(item), item)

############ 默认情况,打印如下 ############
<class 'list'> ['1', ' 2', '3', '4']

############ skipinitialspace=True,打印如下 ############
<class 'list'> ['1', '2', '3', '4']
  • strict

如果设置为True,则将csv输入错误时将引发异常。默认为False

更多参数解释以及csv模块的使用,请看:https://docs.python.org/3.7/library/csv.html

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python让列表逆序排列的3种方式小结

    Python让列表逆序排列的3种方式小结

    这篇文章主要介绍了Python让列表逆序排列的3种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 详解python-nmap的安装与常用方法

    详解python-nmap的安装与常用方法

    ​​python-nmap​​是一个基于​​Python​​的​​nmap​​网络扫描器接口,它允许用户通过 ​​Python​​ 脚本轻松地调用 ​​nmap​​ 的功能,​​nmap​​是一款功能强大的网络扫描和发现工具,本文给大家介绍python-nmap的安装与常用方法,需要的朋友可以参考下
    2024-12-12
  • Python selenium文件上传方法汇总

    Python selenium文件上传方法汇总

    这篇文章主要为大家详细介绍了Python selenium文件上传方法,selenium文件上传的所有方法进行整理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Python 3 使用Pillow生成漂亮的分形树图片

    Python 3 使用Pillow生成漂亮的分形树图片

    这篇文章主要介绍了Python 3 使用Pillow生成漂亮的分形树图片,本文通过实例代码介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • python有几个版本

    python有几个版本

    在本篇内容里小编给大家分享的是关于python版本的相关知识点内容,需要的朋友们可以学习下。
    2020-06-06
  • 一篇文章带你了解python集合基础

    一篇文章带你了解python集合基础

    今天小编就为大家分享一篇关于Python中的集合介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-08-08
  • python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】

    python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】

    这篇文章主要介绍了python栈的基本定义与使用方法,结合实例形式分析了Python栈的初始化、赋值、入栈、出栈等相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • Python实现PyPDF2处理PDF文件的方法示例

    Python实现PyPDF2处理PDF文件的方法示例

    这篇文章主要介绍了Python实现PyPDF2处理PDF文件的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python实现制作透明背景的电子印章

    Python实现制作透明背景的电子印章

    这篇文章主要为大家详细介绍了如何利用Python语言实现制作透明背景的电子印章,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-09-09
  • Python+Kepler.gl实现时间轮播地图过程解析

    Python+Kepler.gl实现时间轮播地图过程解析

    这篇文章主要介绍了Python+Kepler.gl实现时间轮播地图过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论