python标准库csv_python标准库:csv 模块

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函数也支持不同的自定义格式。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值