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基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 Python
详解Python中contextlib上下文管理模块的用法
Jun 28 Python
浅谈Python中的私有变量
Feb 28 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
Django实现分页显示效果
Oct 31 Python
Python中base64与xml取值结合问题
Dec 22 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
python logging.info在终端没输出的解决
May 12 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 Python
Python中np.random.randint()参数详解及用法实例
Sep 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
重置版战役片段
2020/04/09 魔兽争霸
PHP树的代码,可以嵌套任意层
2006/10/09 PHP
php创建多级目录代码
2008/06/05 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
ie 调试javascript的工具
2009/04/29 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python实现简单状态框架的方法
2015/03/19 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
python抓取文件夹的所有文件
2018/02/27 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
法律服务所工作总结
2015/08/10 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang