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计算
Sep 12 Python
Python实现合并字典的方法
Jul 07 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python素数筛选法浅析
Mar 19 Python
Python定时任务sched模块用法示例
Jul 16 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
Jun 03 Python
python中str内置函数用法总结
Dec 27 Python
python中yield的用法详解
Jan 13 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
oracle资料库函式库
2006/10/09 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
Python入门之modf()方法的使用
2015/05/15 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
Python 含参构造函数实例详解
2017/05/25 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
大学生党课思想汇报
2013/12/29 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
离婚案件原告代理词
2015/05/23 职场文书