38 Python csv

  • 定义

    逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),

    CSV格式是分隔的数据格式

  • 存储方式:以纯文本形式存储表格数据(数字和文本)。

  • 分割符

    CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符为其它字符或字符串,最常见的是逗号或制表符。

  • 规范

    1. 数据不跨行

    2. 以逗号(,)作为分隔符

    3. 如果字段中包含特殊字符(逗号,换行符),必须以双引号括住;

      如果字段是空字符串,最好用双引号括住;

      如果字段中包含特殊字符双引号,需要双写双引号来括住该字段

      如content中包含”,则要用”“content”“

    4. 内码格式不限,可为 ASCII、Unicode 或者其他

    5. 不支持特殊字符,如果有特殊字符可能会导致分隔错误

      写入文件时,最好提前进行编码检查,不然可能会导致错行

    6. 如果该字段内容为空,最好以双引号括住,不然可能会导致分隔错误

csv模块

#!/usr/bin/python
# -*- coding=utf-8 -*-

import csv
from collections import namedtuple


for row in csv.reader(['one,two,three']):
    print row  # one, two, three
# 1.csv格式如下
# name  age
# a     1
# b     2

# 分隔符为',', 用双引号作为引用符(quotechar)
# 按行读取, 返回值为list
with open("1.csv") as f:
    fcsv = csv.reader(f, delimiter = ",")
    heading = next(fcsv)
    # 创建命名元组时要注意, 如header的标题不合法,出现不能作为变量名的字符,如-=等
    row = namedtuple('row', heading)
    for i in fcsv:
        print i, type(i)  # ['a', '1'] <type 'list'>
        i = row(*i)
        print i, type(i)  # row(name='a', age='1') <class '__main__.row'>

# 按行读取, 返回值为dict, 第一行为字典的key
with open("1.csv") as f:
    fcsv = csv.DictReader(f)
    for i in fcsv:
        print i, type(i)  # {'age': '2', 'name': 'b'} <type 'dict'>


headers = ("name", "age", "home")
rows = [(1,2,3), (4,5,6), (7,8,9)]
# 按行写入, 如果不以wb形式写, 会多一个换行
with open("write.csv", "wb") as f:
    fcsv = csv.writer(f)
    fcsv.writerow(headers)
    fcsv.writerows(rows)

# 将字典中的内容对号入座
with open("write1.csv", "wb") as f:
    fcsv = csv.DictWriter(f, headers)
    fcsv.writeheader()
    for i in range(len(rows)):
        rows[i] = dict(zip(headers, rows[i]))
    fcsv.writerows(rows)

csv的文件操作要使用wb, rb,这样会省去很多的问题。如在windows中不用wb的形式写入,会多空行,因为windows的换行符为\r\n

注意事项

  1. 当字段内容包含特殊符号(” , \n)时,要将该字段用”“括住,包含双引号的话用”“”“括住
  2. 如果该字段包含特殊字符,csv文件会出现编码错误,也会导致分隔失败

官方文档https://docs.python.org/2/library/csv.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值