csv文件格式是一种通用的电子表格和数据库导入导出格式。最近我调用RPC处理服务器数据时,常常须要将数据作个存档便使用了这一方便的格式。html
Python csv模块封装了经常使用的功能,使用的简单例子以下:python
# 读取csv文件 import csv with open('some.csv', 'rb') as f: # 采用b的方式处理能够省去不少问题 reader = csv.reader(f) for row in reader: # do something with row, such as row[0],row[1] import csv with open('some.csv', 'wb') as f: # 采用b的方式处理能够省去不少问题 writer = csv.writer(f) writer.writerows(someiterable)
默认的状况下, 读和写使用逗号作分隔符(delimiter),用双引号做为引用符(quotechar),当遇到特殊状况是,能够根据须要手动指定字符, 例如:数据库
import csv with open('passwd', 'rb') as f: reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE) for row in reader: print row
上述示例指定冒号做为分隔符,而且指定quote方式为不引用。这意味着读的时候都认为内容是不被默认引用符(")包围的。quoting的可选项为: QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONNUMERIC, QUOTE_NONE
.服务器
有点须要注意的是,当用writer写数据时, None
会被写成空字符串,浮点类型会被调用 repr()
方法转化成字符串。因此非字符串类型的数据会被 str()
成字符串存储。因此当涉及到unicode字符串时,能够本身手动编码后存储或者使用csv提供的 UnicodeWriter
, 具体可参见这里。编码
csv还提供了一种相似于字典方式的读写,方式以下:rest
格式以下:excel
class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds) class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
其中fieldnames指定字典的key值,若是reader里没有指定那么默认第一行的元素,在writer里必定要指定这个。code
使用示例htm
# 读 >>> import csv >>> with open('names.csv') as csvfile: ... reader = csv.DictReader(csvfile) ... for row in reader: ... print(row['first_name'], row['last_name']) ... Baked Beans Lovely Spam Wonderful Spam # 写 import csv with open('names.csv', 'w') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'}) writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'}) writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
csv模块还涉及了其它的概念,好比 Dialects
, 还提供了供错误处理的 exception csv.Error
等,由于实际使用较少及就不累赘在此。更多参考官方文档。unicode