Python操作CSV教程_第1页
Python操作CSV教程_第2页
Python操作CSV教程_第3页
Python操作CSV教程_第4页
Python操作CSV教程_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用过 CSV文件都知道:如果我们的电脑中装了 WPS或 Microsoft Office 的话,.csv 文件默认是被Excel打开的,那么什么是CSV文件? CSV 文件与Excel文件有什么区别?如何通过 Python来操作CSV文件呢?带着 这些问题我们接着往下看。 1简介 1.1 CSVCSV全称Comma-Separated Values ,中文叫逗号分隔值或字符分隔值,它 以纯文本形式存储表格数据(数字和文本),其本质就是一个字符序列,可以由 任意数目的记录组成,记录之间以某种换行符分隔,每条记录由字段组成,通常 所有记录具有完全相同的字段序列,字段间常用逗号或制表符进行分隔。C

2、SV文件格式简单、通用,在现实中有着广泛的应用,其中使用最多的是在程序之间转 移表格数据。1.2 CSV 与 Excel因为CSV文件与Excel文件默认都是用Excel工具打开,那他们有什么 区别呢?我们通过下表简单了解一下。CSVExcel文件后缀为.csv文件后缀为.xls或.xlsx纯文本文件二进制文件存储数据/、包含格式、公式等不仅可以存储数据,还可以对数据进行操 作可以通过 Excel工具打开,也可以通过文本编 辑命打开只能通过Excel工具书开只能编写一次列标题每一行中的每一列都有一个开始标记和 结束标记导入数据时消耗内存较少导入数据时消耗内存较多2基本使用Python通过csv

3、模块来实现CSV格式文件中数据的读写,该模块提供了 兼容Excel方式输出、读取数据文件的功能,这样我们无需知道Excel所采用 CSV格式的细节,同样的它还可以定义其他应用程序可用的或特定需求的CSV格式。csv模块中使用 reader类和 writer类读写序列化的数据,使用DictReader类和DictWriter类以字典的形式读写数据,下面来详细看一下相应功能。首先来看一下csv模块常量信息,如下所示:属性说明QUOTE_ALL指示writer对象给所有字段加上引号QUOTE_MINIMA L,指示writer 对象仅为包含特殊字符(如:定界符、引号字符、行结束符 等)的字段加上引号

4、QUOTE_NONNL ERICJM旨示writer 对象为所有非数字字段加上引号QUOTE_NONE指示writer对象不使用引号引出字段writer(csvfile, dialect=excel, *fmtparams)返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上 转换为带分隔符的字符串。csvfile 可以是具有write()方法的任何对象,如果csvfile 是文件对象,则使用newline= 打开;可选参数dialect 是用 于不同的CSV变种的特定参数组;可选关键字参数fmtparams可以覆写当前变种格式中的单个格式设置。看下示例: import c

5、svwith open( .csvh,newline=f *) as csvfile:writer - csv.writer(csvfile)writer.writerow(idj namej ager)writer .write row ( 11(,张三*222* 并写入多行# data = 坨311 ,张三、(21,),,李四”, 1)# writer.writerows(data)我们打开文件看一下结果,如图所示: reader(csvfile, dialect=excel, *fmtparams)返回一个reader对象,该对象将逐行遍历csvfile , csvfile可以是文件对象

6、和列表对象,如果是文件对象要使用newline= 打开。看下示例: import csv with open( test .csv , newline- ) as csv-File: reader = csv.radrfesvfilej d电limit巨产=) for row in reader: print( .join(row)id,nameage31虹.222Iregister_dialect(name, dialect, *fmtparams)将name与dialect 关联起来。name必须是字符串,要指定dialect ,可 以给出Dialect 的子类或给出fmtparams关键

7、字参数,也可以两者都给出(此 时关键字参数会覆盖 dialect 参数)。先来看一下 dialect 和fmtparams 详 细信息,如下所示:属性说明delimite r用于分隔字段的单字符,默认为逗号doublequ ote控制出现在字段中的引号字符本身应如何被引出,值为 True ,双写引号字符, 值为False ,则在引号字符的前面放置转义符,默认值为Truequoting控制writer何时生成引号,以及reader何时识别引号lineterm inator放在writer产生的行的结尾,默认为rnquotecha r一个单字符,用于包住含有特殊字符(如:引号字符、换行符等)的字段

8、,默认 为skipinit ialspace值为True ,忽略定界符之后的空格,默认为 Falsestrict值为True ,则在输入错误的CSV时抛出Error异常,默认值为Falseescapech ar用于writer 的单子符,在 quoting 设置为QUOTE_NONE情况下转义止界 符,在doublequote 设置为False的情况卜转义引号子符,默认为 None,表示禁用转义卜面通过一个示例作进一步了解,如下所示: import csv csv.registerdialect(mydialecth, delimiter*|*, quoting-csv.QJOTEALL) w

9、ith cpen(t电式.cwnewline-) as csv-File: writer = csv.writerfcsyfilej mydidlecf) writerwriterow( id ,narneT, 1 ageT ) writer ,writeraiw( 1 1601r f 张三 b 222 * ) with open(r.csv*j newline=) as csvfile: readier = csv .readen(csvfile, d电limit电三” 1) for row in reader: print(t .join(row)idrname,|ageim|*SKH*,

10、r222,iDictWriter(f, fieldnames, restval=, extrasaction=raise, dialect=excel, *args, *kwds)创建一个对象,该对象在操作上类似常规writer ,但会将字典映射到输出行,fieldnames参数是由键组成的序列,它指定字典中值的顺序,这些值会按 指定顺序传递给writerow()方法并写入文件;如果字典缺少fieldnames中的键,则可选参数restval用于指定要写入的值;如果传递给 writerow() 方法的字典的某些键在fieldnames 中找不到,则可选参数extrasaction 用于指定要执

11、行的操作,如果将其设置为默认值raise,则会引发ValueError ,如果将其设置为ignore,则字典中的其他键值将被忽略;所有其他可选或关 键字参数都传递给底层的 writer 实例。看下示例: import csv with open(test.csvj Twr, newlire=1) as csvfile: fielctnames = id,dgeT writer- = csv,DietWriter-(csv-filefieldname5 = Tieldranes) wpiten.writeheader() writer, writ eraw ( Id; 10&1 (nameh:张

12、三ageF; h 21*) writer .writ erow (-1 id 1 :以白 21t * name * :,李四age1 : 1 311 )-) with open( *te&t xsv*newline= * ) esv-File : reader = csv.reader(csvfile, delimiter= for row in reader: prlnt(.jein(row)Ldnarne, age ie,5KE2i1892A至四,典DictReader(f, fieldnames=None, restkey=None, restval=None, dialect=exce

13、l, *args, *kwds)创建一个对象,该对象在操作上类似于常规reader ,但是将每行中的信息映射到一个dict,该dict 的键由fieldnames(是一个序列)可选参数给出,如果省略fieldnames ,则文件第一行中的值将用作字段名;如果某一行中的字 段多于字段名,则其余字段将放入列表中,字段名由restkey 指定(默认为Nona ,如果非空白行的字段少于字段名,则缺少的值将用None填充。看一下示例: Impart csv with open(test.csv, n巨二g 亡名n干士1点: reader = c5v.DictReader (csHile) ior row

14、 in reader:Aprint(row1 id* , ro1 name , row .ago-)1691张三211602李四31| Sniffer 类用于推断CSV文件的格式,该类提供了如下两个方法:S sniff(sample, delimiters=None) I分析给定的sample ,如果给出可选的delimiters 参数,则该参数会被解释为 字符串,该字符串包含了可能的有效定界符。has_header(sample) I分析示例文本(假定为CSV格式),如果第一行很可能是一系列列标题,则返回 True o该类及方法使用较少,了解即可,下面通过一个示例简单了解一下。import

15、csvwith open(test.csv, neuline= r) as csvfile:dialect = csv,5niffer().sniff(csvfile.read(1G24)csvfile,seek(0)reader = c& reader(csvfilej diwl皂匚tfor row in reader:print(row| Reader 对象Reader对象指DictReader 实例和reader()函数返回的对象,下面看一下其公开属性和方法。_next_()返回reader的可迭代对象的下一行,返回值可能是列表或字典。d dialect Idialect 描述,只读,供解析器使用。| line_num I源迭代器已经读取了的行数。 fieldnamesI字段名称,该属性为DictReader对象属性。| Writer 对象Writer对象指DictWriter 实例和writer()函数返回的对象,下面看一下其公开属性和方法。 writerow(row)I将参数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论