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字符遍历的艺术
Sep 06 Python
python中使用pyhook实现键盘监控的例子
Jul 18 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
在Python中定义一个常量的方法
Nov 10 Python
Python编程flask使用页面模版的方法
Dec 28 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
Python 50行爬虫抓取并处理图灵书目过程详解
Sep 20 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
Python 过滤错误log并导出的实例
Dec 26 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 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
基于mysql的论坛(5)
2006/10/09 PHP
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
Python装饰器用法实例总结
2018/05/26 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
python语言基本语句用法总结
2019/06/11 Python
Django中信号signals的简单使用方法
2019/07/04 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
python实现实时视频流播放代码实例
2020/01/11 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
Hotels.com越南:酒店预订
2019/10/29 全球购物
物流专业毕业生推荐信范文
2013/11/18 职场文书
企业公益活动策划方案
2014/08/24 职场文书
财务人员个人工作总结
2015/02/27 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
关爱空巢老人感想
2015/08/11 职场文书
德能勤绩工作总结
2015/08/11 职场文书
python基础之停用词过滤详解
2021/04/21 Python
Python机器学习之逻辑回归
2021/05/11 Python
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
python+opencv实现目标跟踪过程
2022/06/21 Python