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实现ip查询示例
Mar 26 Python
Python Web开发模板引擎优缺点总结
May 06 Python
Python中的自定义函数学习笔记
Sep 23 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
Python探索之SocketServer详解
Oct 28 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
python模块和包的应用BASE_PATH使用解析
Dec 14 Python
查看keras的默认backend实现方式
Jun 19 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 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函数extension_loaded()用法实例
2015/01/19 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
Python+django实现简单的文件上传
2016/08/17 Python
Python聊天室程序(基础版)
2018/04/01 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
Python发展史及网络爬虫
2019/06/19 Python
Python图片的横坐标汉字实例
2019/12/04 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
轻化专业学生实习自我鉴定
2013/09/20 职场文书
党校毕业个人总结
2015/02/28 职场文书
唐山大地震的观后感
2015/06/05 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
vue实力踩坑之push当前页无效
2022/04/10 Vue.js