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 参数列表中的self 显式不等于冗余
Dec 01 Python
Python中decorator使用实例
Apr 14 Python
编写Python脚本使得web页面上的代码高亮显示
Apr 24 Python
Python3.2模拟实现webqq登录
Feb 15 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
python3安装crypto出错及解决方法
Jul 30 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
Elasticsearch 批量操作
Apr 19 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
星际流派综述
2020/03/04 星际争霸
优化PHP代码的53条建议
2008/03/27 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
css3的transition属性详解
2014/12/15 HTML / CSS
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
向国旗敬礼活动小结
2014/09/27 职场文书
单位租房协议范本
2014/12/03 职场文书
青岛海底世界导游词
2015/02/11 职场文书
校长师德表现自我评价
2015/03/04 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
解析Redis Cluster原理
2021/06/21 Redis
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript