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实现调用其他python脚本的方法
Oct 05 Python
从Python的源码来解析Python下的freeblock
May 11 Python
Python实现快速多线程ping的方法
Jul 15 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
python3.6实现学生信息管理系统
Feb 21 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
Python PO设计模式的具体使用
Aug 16 Python
iPython pylab模式启动方式
Apr 24 Python
解决Python安装cryptography报错问题
Sep 03 Python
记一次Django响应超慢的解决过程
Sep 17 Python
python自动从arxiv下载paper的示例代码
Dec 05 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
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
AngularJS内置指令
2015/02/04 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
python 实现语音聊天机器人的示例代码
2018/12/02 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
解决Django no such table: django_session的问题
2020/04/07 Python
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
空指针到底是什么
2012/08/07 面试题
广州品高软件.net笔面试题目
2012/04/18 面试题
个人教师自我评价范文
2013/12/02 职场文书
总经理工作职责范文
2014/03/14 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL