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的Django框架来制作一个RSS阅读器
Jul 22 Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
利用python修改json文件的value方法
Dec 31 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
ubuntu上安装python的实例方法
Sep 30 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
python3 配置logging日志类的操作
Apr 08 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
Python创建自己的加密货币的示例
Mar 01 Python
Python数据可视化之Seaborn的安装及使用
Apr 19 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
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
Python中optparse模块使用浅析
2015/01/01 Python
Python实现建立SSH连接的方法
2015/06/03 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
怎样声明子类
2013/07/02 面试题
网络方面基础面试题
2012/11/16 面试题
学生党支部先进事迹
2014/02/04 职场文书
同居协议书范本
2014/04/23 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
MySQL读取JSON转换的方式
2022/03/18 MySQL