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

image
执行
image
写入的文件如下
image
如上,每一行中间多了一个空行,这不是我们所期望的,以上是没有指定参数换行符newline的结果,
没有执行时,csv模块会执行通用换行符,unix平台是'\n',win平台是'\r\n'

下面加上参数newline
image
执行
image
文件内容
image

csv.DictWriter()和csv.DictReader()

数据以dict的形式写入和输出
image
执行
image
文件
image

由于每一行输出的形式是dict ,所以可以按照字段来取值
image

image

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指定的字符 或 行结束符 中的任何字符)的字段加上引号

先看几个例子
image
执行生成的文件
image

image
生成的文件
image

执行生成的文件

在第一例子中,分隔符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的作用有些重复,暂时还没有弄明白

posted @ 2023-05-25 23:54  工作手记  阅读(858)  评论(0编辑  收藏  举报