原文地址:http://www.bugingcode.com/blog/python_csv.html

csv 模块被用来读取CSV格式(用逗号分割数值)的数据文件,CSV格式的文件经常在微软的Excel和其他的程序中使用到。一个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

读取这个文件,你可是简单的循环每一行,使用split方法得到每一个单独的列:

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

代码如下:

$ python csv-example-1.py
Release Date Title
1971 And Now For Something Completely Different
1975 Monty Python And The Holy Grail
1979 Monty Python's Life Of Brian
1982 Monty Python Live At The Hollywood Bowl
1983 Monty Python's The Meaning Of Life

reader函数传入一个序列或者是一个文件对象的迭代器,返回一个迭代器。

csv模块的解析器不仅仅对字符串进行分割。他处理引用值和适当的行结束符,因此你能够读入包含随意的字符串(允许字符串包含逗号)。他也是可以进行配置的,你可以创建和注册一个专有的描述符,用它去读取不同的CSV特性。

如下的例子,介绍如何读取瑞典变种的CSV,它使用分号取代了逗号进行分割。

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函数:

import csv

reader = csv.reader(open("samples/sample.skv"), delimiter=";")

for title, year, director in reader:
print year, title

这个模块同样被用来创建CSV文件。writer函数创建CSV写对象,它可以方便的把数值转换为字符串,并在合适的位置跳出。

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)
$ python csv-example-4.py
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

如果你有一个序列的数据(或者一个迭代器对象),你可以使用writerows方法代替:

writer = csv.writer(sys.stdout)
writer.writerows(data)

这个writer函数也支持不同的自定义格式。

转载请标明来之:阿猫学编程

更多教程:阿猫学编程-python基础教程

python标准库:csv 模块的更多相关文章

  1. [python标准库]Pickle模块

    Pickle-------python对象序列化 本文主要阐述以下几点: 1.pickle模块简介 2.pickle模块提供的方法 3.注意事项 4.实例解析 1.pickle模块简介 The pic ...

  2. Python 标准库 ConfigParser 模块 的使用

    Python 标准库 ConfigParser 模块 的使用 demo #!/usr/bin/env python # coding=utf-8 import ConfigParser import ...

  3. Python标准库——collections模块的Counter类

    1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类 ...

  4. [python标准库]XML模块

    1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词. ...

  5. 【python】Python标准库defaultdict模块

    来源:http://www.ynpxrz.com/n1031711c2023.aspx Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会 ...

  6. Python标准库--os模块

    这个模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行.一个例 ...

  7. python标准库 bisect模块

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #bisect #作用:维护有序列表,而不必在每次向列表增加一个元素 ...

  8. python标准库 sysconfig模块

    # -*- coding: utf-8 -*-# python:2.x__author__ = 'Administrator'import sysconfig#sysconfig:解释器编译时配置#作 ...

  9. Python标准库 -- UUID模块(生成唯一标识)

    UUID是什么: UUID: 通用唯一标识符 ( Universally Unique Identifier ),对于所有的UUID它可以保证在空间和时间上的唯一性,也称为GUID,全称为: UUID ...

  10. Python——标准库 Sys模块

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. MyBatis从入门到精通(第5章):5.4 Example 介绍

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.Eclipse Version: 2019-12 M2 (4.14.0) MyBatis从入门到精通(第5章):MyBatis代码 ...

  2. flutter依赖某些插件,点击运行会出现错误

    org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true android.enableAapt ...

  3. Druid数据库连接池获取连接阻塞(转载)

    一. 背景        17年公司有个项目组在南京做项目的时候,开发框架用的是spring boot ,数据库连接池用的是druid,但老是遇到socket read timeout的错误,不得已放 ...

  4. js实现新闻滚动-单行滚动或者多行滚动

    注明:都是转载. 先说单行滚动: --------直接复制以下代码即可试验 转载http://www.3lian.com/edu/2011/06-30/4986.html----------- < ...

  5. office 无法打开xlsx文件的问题

    1. 设置content-type和header response.setContentType("application/vnd.openxmlformats-officedocument ...

  6. 大道至简伪代码读后感java为代码形式

    //愚公移山 import.java.大道至简.*; import.java.愚公移山.*; public class yishan //定义一个名为yishan的类 {//类定义的开始 public ...

  7. Git内部原理(1)

    Git本质上是一套内容寻址文件系统,在此之上提供了VCS的用户界面. Git底层命令(plumbing) vs 高层命令(porcelain) Git的高层命令包括checkout.branch.re ...

  8. day13-面向对象

    #解决同一类问题,使用面向对象的思想.类是制造对象的模具,类是抽象的,我们能知道它有哪些属性(name,age,saraly),但不知道具体的属性值. #看下面代码:类Penson制造了实例化对象re ...

  9. Revit二次开发-获取材质的纹理贴图

    通过IExportContext导出类中的Onmaterial()方法,可以获取到材质相关信息,主要是材质ID,再根据材质ID得到材质对象material,然后通过如下代码获取Asset对象: Ele ...

  10. 2. Unconstrained Optimization

    2.1 Basic Results on the Existence of Optimizers 2.1. Let \(f:U->\mathbb{R}\) be a function on a ...