python内置库--csv模块
1简单介绍
看名字就知道是用来处理csv文件的,此外,csv文件可以用excel等表格工具编辑,以前我一直以为是什么系统文件 好奇这个文件用什么软件打开
2 相关函数介绍
csv.reader() csv.writer()
csv.reader(csvfile, dialect='excel', **fmtparams)
返回一个 reader 对象,该对象将逐行遍历csvfile
csvfile 可以是任何对象,只要这个对象支持 iterator 协议并在每次调用 next() 方法时都返回字符串,file objects 和 list objects适用。如果 csvfile 是file objects,则打开它时应使用 newline=''
csv.writer(csvfile, dialect='excel', **fmtparams)
返回一个 writer 对象,
csvfile 可以是任何具有 write() 方法的对象。 如果 csvfile 是一个file object,则打开它时应使用 newline=''
可指定参数delimiter,用于在文件中分割字符,默认是逗号
**fmtparams 代表一些列参数字段,这些参数字段决定了具体按照何种格式来read或write
执行
写入的文件如下
如上,每一行中间多了一个空行,这不是我们所期望的,以上是没有指定参数换行符newline的结果,
没有执行时,csv模块会执行通用换行符,unix平台是'\n',win平台是'\r\n'
下面加上参数newline
执行
文件内容
csv.DictWriter()和csv.DictReader()
数据以dict的形式写入和输出
执行
文件
由于每一行输出的形式是dict ,所以可以按照字段来取值
csv.reader() csv.writer()中的**fmtparams
**fmtparams 代表一些列参数字段,这些参数字段决定了具体按照何种格式来read或write,用户可以自定义这些字段值,具体如下
delimiter
quotechar
quoting
doublequote
escapechar
lineterminator
skipinitialspace
delimiter
指定内容间的分割字符,只能是一个单字符,默认是逗号
quotechar
A one-character string used to quote fields containing special characters, such as the delimiter or quotechar, or which contain new-line characters. It defaults to '"'
一个单字符,用于包住含有特殊字符的字段,特殊字符如 定界符 或 引号字符 或换行符。默认为 '"'
注意对照看英文解释 一些意思表达比较准确
quoting
控制 writer 何时生成引号,以及 reader 何时识别引号。该属性可以等于任何 QUOTE_* 常量
默认为 QUOTE_MINIMAL
csv.QUOTE_MINIMAL
Instructs writer objects to only quote those fields which contain special characters such as delimiter, delimiter or any of the characters in lineterminator
指示 writer 对象仅为包含特殊字符(例如 delimiter指定的字符、delimiter指定的字符 或 行结束符 中的任何字符)的字段加上引号
先看几个例子
执行生成的文件
生成的文件
执行生成的文件
在第一例子中,分隔符delimiter是-,第个例子则是我们常见的逗号
所以列表['Baked','Beans']的两个数据 一个写成 Baked-Beans 另一个写成Baked,Beans
关于quotechar,我的理解是,当字段中出现一些特殊字符时,quotechar指定的字符就会把这样的字段包裹起来,这些特殊字符包括delimiter指定的字符、\r\n、quotechar本身指定的字符
第一个例子中['ab\r\ncd']满足这个条件,所以内容的首尾被quotechar指定的字符包裹起来了
第2个例子中['Sp,am']也满足这个条件
有点特殊的是第一个例子中的['a|b'] 他不仅把头尾包裹起来,还多出了2个quotechar字符,这个暂时没有明白
quoting
quoting感觉和quotechar的作用有些重复,暂时还没有弄明白