Python程序中用csv模块来操作csv文件的基本使用教程


Posted in Python onMarch 03, 2016

CSV全称为“Comma Separated Values”,是一种格式化的文件,由行和列组成,分隔符可以根据需要来变化。
如下面为一csv文件:

Title,Release Date,Director
And Now For Something Completely Different,1971,Ian MacNaughton
Monty Python And The Holy Grail,1975,Terry Gilliam and Terry Jones
Monty Python's Life Of Brian,1979,Terry Jones
Monty Python Live At The Hollywood Bowl,1982,Terry Hughes
Monty Python's The Meaning Of Life,1983,Terry Jones

csv可以比较方便的在不同应用之间迁移数据。可以将数据批量导出为csv格式,然后倒入到其他应用程序中。很多应用中需要导出报表,也通常用csv格式导出,然后用Excel工具进行后续编辑。

打印发行日期及标题,逐行处理:

for line in open("samples/sample.csv"):
  title, year, director = line.split(",")
  print year, title

使用csv模块处理:

import csv
reader = csv.reader(open("samples/sample.csv"))
for title, year, director in reader:
  print year, title

改变分隔符

创建一csv.excel的子类,并修改分隔符为”;”

# File: csv-example-2.py
import csv
class SKV(csv.excel):
  # like excel, but uses semicolons
  delimiter = ";"
 
csv.register_dialect("SKV", SKV)
reader = csv.reader(open("samples/sample.skv"), "SKV")
for title, year, director in reader:
  print year, title

如果仅仅仅是改变一两个参数,则可以直接在reader参数中设置,如下:

# File: csv-example-3.py
 
import csv
 
reader = csv.reader(open("samples/sample.skv"), delimiter=";")
 
for title, year, director in reader:
  print year, title

将数据存为CSV格式

通过csv.writer来生成一csv文件。

# File: csv-example-4.py
 
import csv
import sys
 
data = [
  ("And Now For Something Completely Different", 1971, "Ian MacNaughton"),
  ("Monty Python And The Holy Grail", 1975, "Terry Gilliam, Terry Jones"),
  ("Monty Python's Life Of Brian", 1979, "Terry Jones"),
  ("Monty Python Live At The Hollywood Bowl", 1982, "Terry Hughes"),
  ("Monty Python's The Meaning Of Life", 1983, "Terry Jones")
]
 
writer = csv.writer(sys.stdout)
 
for item in data:
  writer.writerow(item)

实例

下面我们来看一个比较完整的例子,代码说明在注释中:

import csv


# dialect是访问csv文件时需要指定的参数之一,用来确定csv文件的数据格式
# 下面这个函数列举系统支持的dialect有哪些,默认值是'excel',用户也可
# 以从Dialect派生一个类,使用该类的实例作为dialect参数。
print csv.list_dialects()


def test_writer():
  # csv文件必须以二进制方式open
  with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])


def test_reader():
  with open('eggs.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
      print row


# sniffer 用来推断csv文件的格式,不是很准确
def test_sniffer():
  with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ')

    spamwriter.writerow(['Spam'] * 2 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

  # 通常你需要指定与写入者相同的文件格式才能正确的读取数据
  with open('eggs.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ')
    for row in spamreader:
      print ', '.join(row)

  # 如果不知道文件格式,sniffer就可以派上用场了
  with open('eggs.csv', 'rb') as csvfile:
    # 用sniffer推断文件格式,从而得到dialect
    dialect = csv.Sniffer().sniff(csvfile.read(1024))
    print dialect.delimiter, dialect.quotechar

    # 文件重新移动到头部
    csvfile.seek(0)

    # 用推断出来的dialect创建reader
    reader = csv.reader(csvfile, dialect)

    for row in reader:
      print ', '.join(row)
Python 相关文章推荐
Python中的默认参数详解
Jun 24 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
Python 模拟购物车的实例讲解
Sep 11 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python实现注册、登录小程序功能
Sep 21 Python
Django中使用Celery的方法示例
Nov 29 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
python如何爬取网页中的文字
Jul 28 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 #Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 #Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 #Python
python套接字流重定向实例汇总
Mar 03 #Python
Python设计模式中单例模式的实现及在Tornado中的应用
Mar 02 #Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 #Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 #Python
You might like
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
Javascript----文件操作
2007/01/18 Javascript
extjs fckeditor集成代码
2009/05/10 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
python开启多个子进程并行运行的方法
2015/04/18 Python
python中sys.argv参数用法实例分析
2015/05/20 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
快速查找Python安装路径方法
2020/02/06 Python
python文件和文件夹复制函数
2020/02/07 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
幼儿园家长评语
2014/02/10 职场文书
暑假学习心得体会
2014/09/02 职场文书
小石潭记导游词
2015/02/03 职场文书
初中毕业感言300字
2015/07/31 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python
MYSQL常用函数介绍
2022/05/05 MySQL