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 相关文章推荐
记录Django开发心得
Jul 16 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
Python实现决策树C4.5算法的示例
May 30 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
关于python字符串方法分类详解
Aug 20 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
Django REST Swagger实现指定api参数
Jul 07 Python
python如何设置静态变量
Sep 07 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
ajax jquery实现页面某一个div的刷新效果
2021/03/04 jQuery
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
深入浅析python继承问题
2016/05/29 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
python取余运算符知识点详解
2019/06/27 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
python学习笔记之多进程
2020/08/06 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
体育课外活动总结
2014/07/08 职场文书
明星员工获奖感言
2014/08/14 职场文书
经典导游欢迎词
2015/01/26 职场文书
超市采购员岗位职责
2015/04/07 职场文书
Python Pygame实战之塔防游戏的实现
2022/03/17 Python
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers