python中内置库csv的使用及说明
作者:玉米丛里吃过亏 发布时间:2022-02-22 07:31:54
所谓的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
来源:https://blog.csdn.net/y472360651/article/details/113972240


猜你喜欢
- 本文实例讲述了Python简单实现TCP包发送十六进制数据的方法。分享给大家供大家参考,具体如下:举例: 0x12, 0x34可以直接拼成
- 1.设置Headers有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们
- 题目:给一个列表,找元素在此列表中的位置,如果找到,返回此元素的下标,如果找不到,那就直接返回空解决方法1:# _*_ coding:UTF
- 本文实例讲述了python采集百度百科的方法。分享给大家供大家参考。具体如下:#!/usr/bin/python# -*- coding:
- 前言昨天把自己的VASP文件处理库进行了打包并上传到PyPI,现在可以直接通过pip和easy_install来安装VASPy啦(同时欢迎使
- 最近研究微信API,发现个非常好用的python库:wxpy。wxpy基于itchat,使用了 Web 微信的通讯协议,实现了微信登录、收发
- 使Web系统的开发与维护更加方便,从而有效的节省人力物力,受到了越来越多企业的青眯。 模板引擎是MVC模式建立过程的重要方法,开发者可以设计
- 本文实例讲述了Java开发之Spring连接数据库方法。分享给大家供大家参考,具体如下:接口:package cn.com.service;
- 这个验证类的完成有很长时间了,一直没有分享给大家使用了这么长时间之后感觉挺顺手,用于一些不需要特殊效果的表单验证个人认为已经足够了,还是挺好
- 1. 什么是404404是一个 http 错误代码,即请求的网页不存在。代码404的第一个“4”代表客户端的错误,如错误的网页位址;后两的数
- 介绍此教程为我的数篇文章中的一个重点。主题是魔术方法。 什么是魔术方法?他们是面向对象的Python的一切。他们是可以给你的类增加"
- © 版权符号显示不清楚,就是那个圈C,在某些网站上就是显示太小,看不清楚。一开始还以为是字体大小的原因,调大以后,还是一样
- 本文实例讲述了Python脚本实现虾米网签到功能的方法。分享给大家供大家参考,具体如下:概述这个脚本完成了自动登录虾米网、签到的功能。大致要
- Unet是一个最近比较火的网络结构。它的理论已经有很多大佬在讨论了。本文主要从实际操作的层面,讲解pytorch从头开始搭建UNet++的过
- 300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下使用链表来实现class Node(object): def
- 今天研究了下Python中的传值问题,通常在C、C++中有按值传递和按引用传递两种情况,按值传递时会拷贝实参,而按引用传递时只是给形参赋了一
- 什么是数据库镜像?Robidoux:数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个
- 需求已知年份和历年最大冻土深度,计算最大冻土深度Mk突变检验。原理工具和语言pythonjupter notebook代码过程定义函数def
- 专家解答 通过查询任何数据库中的三个系统表,你可以获得每个表的每一个字段的默认值。下面是这个核心查询。它返回分配给当前数据库中每个用户表的默
- 如果index是时间序列就不用转datetime;但是如果时间序列是表中的某一列,可以把这一列设为index例如:代码:DF=df2.set