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模块学习 datetime介绍
Aug 27 Python
python动态监控日志内容的示例
Feb 16 Python
Python模拟登陆实现代码
Jun 14 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
三个python爬虫项目实例代码
Dec 28 Python
Django 实现对已存在的model进行更改
Mar 28 Python
详解Python IO口多路复用
Jun 17 Python
Python装饰器结合递归原理解析
Jul 02 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 Python
python字符串的一些常见实用操作
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的垃圾回收机制详解
2013/10/28 PHP
ini_set的用法介绍
2014/01/07 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
document.all与WEB标准
2020/05/13 Javascript
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
python获取当前日期和时间的方法
2015/04/30 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
机电一体化应届生求职信范文
2014/01/24 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
学校班班通实施方案
2014/06/11 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
思想工作总结范文
2015/08/12 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server