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使用xlrd模块读写Excel文件的方法
May 06 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
利用python实现数据分析
Jan 11 Python
Python解析Excle文件中的数据方法
Oct 23 Python
Django开发的简易留言板案例详解
Dec 04 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Python实战购物车项目的实现参考
Feb 20 Python
python把转列表为集合的方法
Jun 28 Python
django中的图片验证码功能
Sep 18 Python
Django 限制访问频率的思路详解
Dec 24 Python
Python实现Word表格转成Excel表格的示例代码
Apr 16 Python
python用字节处理文件实例讲解
Apr 13 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实现改变图片直接打开为下载的方法
2015/04/14 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
python基础教程之对象和类的实际运用
2014/08/29 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
深入解析Python中的线程同步方法
2016/06/14 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
在python3中实现更新界面
2020/02/21 Python
python如何进入交互模式
2020/07/06 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
机械设计及其自动化求职推荐信
2014/02/17 职场文书
学习经验交流会主持词
2014/04/01 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
考核评语大全
2014/04/29 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
无工作证明怎么写
2015/06/15 职场文书
新郎新娘致辞
2015/07/31 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis