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命令行参数解析模块optparse使用实例
Apr 13 Python
使用python实现生成用户信息
Mar 20 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
python计算两个矩形框重合百分比的实例
Nov 07 Python
pandas 将索引值相加的方法
Nov 15 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
pybind11在Windows下的使用教程
Jul 04 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
Python接收手机短信的代码整理
Aug 02 Python
Python实现EM算法实例代码
Oct 04 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 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 define()函数以及defined()函数的用法详解
2013/06/05 PHP
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
XML的代替者----JSON
2007/07/21 Javascript
js 替换
2008/02/19 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
Python简单的制作图片验证码实例
2017/05/31 Python
python定向爬取淘宝商品价格
2018/02/27 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
函授毕业个人自我评价
2014/02/20 职场文书
机关节能减排实施方案
2014/03/17 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
先进班集体事迹材料
2014/12/25 职场文书
个人党性锻炼总结
2015/03/05 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
防震减灾主题班会
2015/08/14 职场文书
晚会开幕词范文
2016/03/04 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis