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的绘图工具matplotlib使用实例
Jul 03 Python
Python运算符重载用法实例
May 28 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
python 中split 和 strip的实例详解
Jul 12 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
Python封装原理与实现方法详解
Aug 28 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
python可视化text()函数使用详解
Feb 11 Python
Python如何读写字节数据
Aug 05 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 Python
Django url 路由匹配过程详解
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
十天学会php之第七天
2006/10/09 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php获取操作系统语言代码
2013/11/04 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
限制文本字节数js代码
2007/03/06 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
python人人网登录应用实例
2014/09/26 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
会计专业的自荐信
2013/12/12 职场文书
保护环境倡议书范文
2014/05/13 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
节约用电倡议书
2015/04/28 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
护理自荐信
2019/05/14 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python