Python CSV模块使用实例

 更新时间:2015年04月09日 10:38:20   投稿:junjie  
这篇文章主要介绍了Python CSV模块使用实例,本文将举几个例子来介绍一下Python的CSV模块的使用方法,包括reader、writer、DictReader、DictWriter.register_dialect等,需要的朋友可以参考下

举几个例子来介绍一下,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快速绘制海报级别地图详解

    Python之所以这么流行,是因为它不仅能够应用于科技领域,还能用来做许多其他学科的研究工具,最常见的便是绘制地图,这篇文章主要给大家介绍了关于如何利用Python快速绘制海报级别地图的相关资料,需要的朋友可以参考下
    2021-09-09
  • python之ImportError:模块引入异常问题

    python之ImportError:模块引入异常问题

    这篇文章主要介绍了python之ImportError:模块引入异常问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • python机器学习Logistic回归原理推导

    python机器学习Logistic回归原理推导

    这篇文章主要为大家介绍了python机器学习Logistic回归原理推导,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Django框架model模型对象验证实现方法分析

    Django框架model模型对象验证实现方法分析

    这篇文章主要介绍了Django框架model模型对象验证实现方法,结合实例形式分析了Django框架model模型对象验证相关原理、实现步骤及操作注意事项,需要的朋友可以参考下
    2019-10-10
  • Flask添加路由的三种方法

    Flask添加路由的三种方法

    Flask 是一个流行的 Python Web 框架,它提供了多种方法来添加路由,本文详细的介绍了Flask添加路由的三种方法,感兴趣的可以了解一下
    2023-11-11
  • python基础学习之组织文件

    python基础学习之组织文件

    今天带大家复习python基础知识,此文章将要介绍如何组织文件,既拷贝,移动等,文中有非常详细的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • python django事务transaction源码分析详解

    python django事务transaction源码分析详解

    这篇文章主要介绍了python django事务transaction源码分析详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • Python2.7实现多进程下开发多线程示例

    Python2.7实现多进程下开发多线程示例

    这篇文章主要为大家详细介绍了Python2.7实现多进程下开发多线程示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • python list count统计个数的实现

    python list count统计个数的实现

    这篇文章主要介绍了python list count统计个数的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • python按照行来读取txt文件全部内容(去除空行处理掉\t,\n后以列表方式返回)

    python按照行来读取txt文件全部内容(去除空行处理掉\t,\n后以列表方式返回)

    这篇文章主要介绍了python按照行来读取txt文件全部内容 ,去除空行,处理掉\t,\n后,以列表方式返回,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-06-06

最新评论