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字符串处理实例详解
May 18 Python
详解python中executemany和序列的使用方法
Aug 12 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
详解【python】str与json类型转换
Apr 29 Python
Python实现钉钉订阅消息功能
Jan 14 Python
Python数据结构dict常用操作代码实例
Mar 12 Python
Python实现代码块儿折叠
Apr 15 Python
Python爬虫回测股票的实例讲解
Jan 22 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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通用防注入程序 推荐
2011/02/26 PHP
php URL验证正则表达式
2011/07/19 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
javascript开发中因空格引发的错误
2010/11/08 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
解决uWSGI的编码问题详解
2017/03/24 Python
python操作列表的函数使用代码详解
2017/12/28 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
深入分析python 排序
2020/08/24 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
造价工程师个人求职信
2013/09/21 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
地球一小时活动总结
2015/02/27 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle