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 装饰器功能以及函数参数使用介绍
Jan 27 Python
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
python检测远程端口是否打开的方法
Mar 14 Python
python使用自定义user-agent抓取网页的方法
Apr 15 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
python实现控制台打印的方法
Jan 12 Python
django celery redis使用具体实践
Apr 08 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
Python3使用Selenium获取session和token方法详解
Feb 16 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 Python
Pandas 稀疏数据结构的实现
Jul 25 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 字符转义 注意事项
2009/05/27 PHP
php 静态变量的初始化
2009/11/15 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
浅谈php调用python文件
2019/03/29 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python自动登录126邮箱的方法
2015/07/10 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
python+django加载静态网页模板解析
2017/12/12 Python
Python实现的字典值比较功能示例
2018/01/08 Python
python如何为创建大量实例节省内存
2018/03/20 Python
python中pika模块问题的深入探究
2018/10/13 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
python增加图像对比度的方法
2019/07/12 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
pymysql模块的操作实例
2019/12/17 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
巴西手表购物网站:eclock
2019/03/19 全球购物
20年同学聚会邀请函
2014/02/04 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL