文档介绍:该【Python 操作 CSV教程 】是由【kunpengchaoyue】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【Python 操作 CSV教程 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。使用过CSV文件都知道:如果我们的电脑中装了WPS或MicrosoftOffice的话,.csv文件默认是被Excel打开的,那么什么是CSV文件?CSV文件与Excel文件有什么区别?如何通过Python来操作CSV文件呢?带着这些问题我们接着往下看。
1简介
CSV
CSV全称Comma-SeparatedValues,中文叫逗号分隔值或字符分隔值,它以纯文本形式存储表格数据(数字和文本),其本质就是一个字符序列,可以由任意数目的记录组成,记录之间以某种换行符分隔,每条记录由字段组成,通常所有记录具有完全相同的字段序列,字段间常用逗号或制表符进行分隔。CSV文件格式简单、通用,在现实中有着广泛的应用,其中使用最多的是在程序之间转移表格数据。
CSV与Excel
因为CSV文件与Excel文件默认都是用Excel工具打开,那他们有什么区别呢?我们通过下表简单了解一下。
CSVExcel
纯文本文件
二进制文件
存储数据不包含格式、公式等
不仅可以存储数据,还可以对数据进行操作
可以通过Excel工具打开,也可以通过文本编辑器打开
只能通过Excel工具打开
只能编写一次列标题
每一行中的每一列都有一个开始标记和结束标记
导入数据时消耗内存较少
导入数据时消耗内存较多
2基本使用
Python通过csv模块来实现CSV格式文件中数据的读写,该模块提供了兼容Excel方式输出、读取数据文件的功能,这样我们无需知道Excel所采用CSV格式的细节,同样的它还可以定义其他应用程序可用的或特定需求的CSV格式。csv模块中使用reader类和writer类读写序列化的数据,使用DictReader类和DictWriter类以字典的形式读写数据,下面来详细看一下相应功能。首先来看一下csv模块常量信息,如下所示:
属性
说明
QU0TE_ALL
指示writer对象给所有字段加上引号
QUOTE_MINIMA
L
指示writer对象仅为包含特殊字符(如:定界符、引号字符、行结束符等)的字段加上引号
QUOTE_NONNUM
ERIC
指示writer对象为所有非数字字段加上引号
QUOTE_NONE
指示writer对象不使用引号引出字段
writer(csvfile,dialect='excel',**fmtparams)
返回一个writer对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。csvfile可以是具有write()方法的任何对象,如果csvfile是文件对象,则使用newline二''打开;可选参数dialect是用于不同的CSV变种的特定参数组;可选关键字参数fmtparams可以覆写当前变种格式中的单个格式设置。看下示例:
importcsv
withopen(1te-,'w',newline=r')as匚svfile:
iter=
(['id','name'3rage'])
wir'([R1S01''张三'222'])
#写入多行
data=[('10011,'张三・,'21'),「'李四",'31')]
)
我们打开文件看一下结果,如图所示:
reader(csvfile,dialect='excel',**fmtparams)
返回一个reader对象,该对象将逐行遍历csvfile,csvfile可以是文件对象和列表对象,如果是文件对象要使用newline」’打开。看下示例:
>>>importcsv
>>>withopen{'3newline=11)as匚s\rFile:
>>>reader=&r(csv-Fila,d&liiniter='')
>>>-forrowinreader:
>>>printfrj'.join(row)5
idfname,age
register_dialect(name[,dialect[,**fmtparams]])
将name与dialect关联起来。name必须是字符串,要指定dialect,可以给出Dialect的子类或给出fmtparams关键字参数,也可以两者都给出(此时关键字参数会覆盖dialect参数)。先来看一下dialect和fmtparams详细信息,如下所示:
属性说明
delimite
r
用于分隔字段的单字符,默认为逗号
doublequ
ote
控制出现在字段中的引号字符本身应如何被引出,值为True,双写引号字符,值为False,则在引号字符的前面放置转义符,默认值为True
quoting
控制writer何时生成引号,以及reader何时识别引号
lineterminator
放在writer产生的行的结尾,默认为’\r\n'
quotecha
r
个单字符,用于包住含有特殊字符(如:引号字符、换行符等)的字段,默认为’〃’
skipinitialspace
值为True,忽略定界符之后的空格,默认为False
strict
值为True,则在输入错误的CSV时抛出Error异常,默认值为False
escapech
ar
用于writer的单字符,在quoting设置为QU0TE_N0NE的情况下转义定界符,在doublequote设置为False的情况下转义引号字符,默认为None,表示禁用转义
F面通过一个示例作进一步了解,如下所示:
>>>impoptcsv
>>>('mydialecdelimiter='|1jquoting=)>>>withopen(j'w',newlirbe='')ascsv-File:
>>>writer=^rmydliale匚
>>>(['id',rname','日gw'])
>>(['1061','张三Sr222'])
>>withopen(Fnewline='')ascsvfile::
>>>reader==r1)
>>>forrowinreader:
>>print(',(row))
id|''name,F|,,age,'
1M11"张三“”222“
DietWriter(f,fieldnames,restval='',extrasaction='raise',
dialect='excel',*args,**kwds)
创建一个对象,该对象在操作上类似常规writer,但会将字典映射到输出行,fieldnames参数是由键组成的序列,它指定字典中值的顺序,这些值会按指定顺序传递给writerow()方法并写入文件;如果字典缺少fieldnames中的键,则可选参数restval用于指定要写入的值;如果传递给writerow()方法的字典的某些键在fieldnames中找不到,则可选参数extrasaction用于指定要执行的操作,如果将其设置为默认值’raise',则会引发ValueError,如果将其设置为'ignore',则字典中的其他键值将被忽略;所有其他可选或关键字参数都传递给底层的writer实例。看下示例:
>>>ilmportcsv
>>>withopen('j'w1,newline^''Jcsvfile:
>>>fieldnames=['id','name','age']
>>>writer=-iter(csvfile,fieldnames=-Fieldnames)
>>>)
>>>({'id':r1091F,'namer;'张三’』'age1:'21'})
>>>({'id1:'10&21'name':'李四'$'age':'31'})
>>>withapen('jnewline='')asczsv+ile:
>>>reader=-tcsvfile,deliniter=r')
>>>forrowinreader:
>>>print(',(row))
id,,name,age
Mei-张三左i
1002,李四E
DietReader(f,fieldnames=None,restkey=None,restval=None,
dialect='excel',*args,**kwds)
创建一个对象,该对象在操作上类似于常规reader,但是将每行中的信息映射到一个dict,该dict的键由fieldnames(是一个序列)可选参数给出,如果省略fieldnames,则文件第一行中的值将用作字段名;如果某一行中的字段多于字段名,则其余字段将放入列表中,字段名由restkey指定(默认为None),如果非空白行的字段少于字段名,则缺少的值将用None填充。看一下示例:
10&1
1092
reader
■forrowinreader:
用于推断CSV文件的格式,该类提供了如下两个方法:
!sniff(sample,delimiters=None)
withopen(°newline=\ascsvfile:
(csv-filej
Sniffer类
分析给定的sample,如果给出可选的delimiters参数,则该参数会被解释为字符串,该字符串包含了可能的有效定界符。
\has_header(sample)
分析示例文本(假定为CSV格式),如果第一行很可能是一系列列标题,则返
reader=csv・r'ENd亡「(匚5¥十11吕」dialect}
■forrowinreader:
回True。
该类及方法使用较少,了解即可,下面通过一个示例简单了解一下。
importcsv
dialect=}.sriff{'1024i)
&i
printf
Reader对象
Reader对象指DietReader实例和reader()函数返回的对象,下面看一下其公开属性和方法。
!__next__()
返回reader的可迭代对象的下一行,返回值可能是列表或字典。
|dialect
dialect描述,只读,供解析器使用。
|line_num
源迭代器已经读取了的行数。
Jfieldnames
字段名称,该属性为DietReader对象属性。
|Writer对象
Writer对象指DictWriter实例和writer()函数返回的对象,下面看一下其公开属性和方法。
[writerow(row)
将参数row写入writer的文件对象。
!writerows(rows)
将rows*(即能迭代出多个上述*row对象的迭代器)中的所有元素写入writer
的文件对象。
\writeheader()
在writer的文件对象中,写入一行字段名称,该方法为DictWriter对象方法。
[dialect
dialect描述,只读,供writer使用。
|总结
本文介绍了CSV及使用Python操作CSV文件,能够通过本文的学****对CSV有一定了解及通过Python实际操作CSV文件。