Python CSV模块使用实例


Posted in Python onApril 09, 2015

举几个例子来介绍一下,Python 的 CSV模块的使用方法,包括,reader, writer, DictReader, DictWriter.register_dialect

一直非常喜欢python的csv模块,简单易用,经常在项目中使用,现在举几个例子说明一下。

reader(csvfile[, dialect='excel'][, fmtparam])

参数表:

csvfile
        需要是支持迭代(Iterator)的对象,并且每次调用next方法的返回值是字符串(string),通常的文件(file)对象,或者列表(list)对象都是适用的,如果是文件对象,打开是需要加"b"标志参数。

dialect
        编码风格,默认为excel方式,也就是逗号(,)分隔,另外csv模块也支持excel-tab风格,也就是制表符(tab)分隔。其它的方式需要自己定义,然后可以调用register_dialect方法来注册,以及list_dialects方法来查询已注册的所有编码风格列表。

fmtparam
        格式化参数,用来覆盖之前dialect对象指定的编码风格。

例子:

import csv
reader = csv.reader(file('your.csv', 'rb'))

for line in reader:

    print line

 
writer(csvfile[, dialect='excel'][, fmtparam])

参数表(略: 同reader, 见上)

例子:

import csv
writer = csv.writer(file('your.csv', 'wb'))

writer.writerow(['Column1', 'Column2', 'Column3'])

lines = [range(3) for i in range(5)]

for line in lines:

    writer.writerow(line)

DictReader

同reader差不多,都是读取CSV用的,只不过会生成一个字典(dict)类型的返回,而不是迭代类型。

DictWriter

 我主要想说的是DictWriter,我为什么会喜欢使用DictWriter呢,因为普通的writer你需要手工去构建列表,尤其是通过表单提交的时候,而我之前因为一直在zope平台上开发,而zope支持一种高级表单数据模型,也就是可以通过定义表单的时候加入相应的标志来使提交后的表单数据自动的生成一个记录(records)类型,也就是生成一个每项数据都是一个字典的列表。这样,我就可以非常方便的直接把表单数据传给 DictWriter而生成csv,当然这个是在你能保证数据的正确性的前提下。好下面我来简单的说明一下这种zope的高级表单数据类型。

例子:

<form action='test_form_action' method=post>

            <input type="text" name="rows.Column1:records" value="0" />

            <input type="text" name="rows.Column2:records" value="1" />

            <input type="text" name="rows.Column3:records" value="2" />

            <input type="text" name="rows.Column4:records" value="3" />

    <br />

            <input type="text" name="rows.Column1:records" value="0" />

            <input type="text" name="rows.Column2:records" value="1" />

            <input type="text" name="rows.Column3:records" value="2" />

            <input type="text" name="rows.Column4:records" value="3" />

    <br />

            <input type="text" name="rows.Column1:records" value="0" />

            <input type="text" name="rows.Column2:records" value="1" />

            <input type="text" name="rows.Column3:records" value="2" />

            <input type="text" name="rows.Column4:records" value="3" />

    <br />

            <input type="text" name="rows.Column1:records" value="0" />

            <input type="text" name="rows.Column2:records" value="1" />

            <input type="text" name="rows.Column3:records" value="2" />

            <input type="text" name="rows.Column4:records" value="3" />

    <br />

            <input type="text" name="rows.Column1:records" value="0" />

            <input type="text" name="rows.Column2:records" value="1" />

            <input type="text" name="rows.Column3:records" value="2" />

            <input type="text" name="rows.Column4:records" value="3" />

    <br />

<input type="submit" value="Submit CSV" />

</form>

表单提交后的结果是:
rows = [{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},

        {'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},

        {'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},

        {'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},

        {'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'}]

这样就可以直接调用DictWriter.writerows方法来处理了:
import csv
fieldnames = ['Column1', 'Column2', 'Column3', 'Column4']

dict_writer = csv.DictWriter(file('your.csv', 'wb'), fieldnames=fieldnames)

dict_writer.writerow(fieldnames) # CSV第一行需要自己加入

dict_writer.writerows(rows)  # rows就是表单提交的数据
*注意:这里的csv文件写入需要External Method的支持,因为在zope中由于权限沙箱的问题是不能直接操作csv模块来读写文件系统的。

 
这样用起来是不是非常的方便呢,这里给出生成上面表单的DTML代码:
<form action='test_form' method=post>

<dtml-in "range(5)">

    <dtml-in "range(4)">

        <input type="text" name="rows.Column&dtml-sequence-number;:records" value="&dtml-sequence-item;" />

    </dtml-in>

<br />

</dtml-in>

<input type="submit" value="Submit CSV" />

</form>

您可以根据您自己的需要来改写这个表单的生成。

参考文献:
http://docs.python.org/lib/module-csv.html
http://www.python.org/dev/peps/pep-0305/

Python 相关文章推荐
详细解析Python中__init__()方法的高级应用
May 11 Python
全面了解Python环境配置及项目建立
Jun 30 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
基于Python log 的正确打开方式
Apr 28 Python
Python实现多级目录压缩与解压文件的方法
Sep 01 Python
python图像处理入门(一)
Apr 04 Python
python动态进度条的实现代码
Jul 03 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
Python如何根据时间序列数据作图
May 12 Python
Python魔术方法专题
Jun 19 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 Python
Python常用随机数与随机字符串方法实例
Apr 09 #Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 #Python
举例讲解Python程序与系统shell交互的方式
Apr 09 #Python
使用Python中的cookielib模拟登录网站
Apr 09 #Python
列举Python中吸引人的一些特性
Apr 09 #Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 #Python
在Python的框架中为MySQL实现restful接口的教程
Apr 08 #Python
You might like
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
vue+element实现批量删除功能的示例
2018/02/28 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
python文本数据处理学习笔记详解
2019/06/17 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
django中forms组件的使用与注意
2019/07/08 Python
详解python中__name__的意义以及作用
2019/08/07 Python
简单了解python数组的基本操作
2019/11/26 Python
Python同时迭代多个序列的方法
2020/07/28 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
学校安全管理责任书
2014/07/23 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
小学教师岗位职责
2015/04/02 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers