3

思路

  • 简单的生成和读取 CSV

  • CSV 文件格式

  • 使用 csv 库

Python with CSV

先有个很朴素的生成和解析的方法。

生成:

data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]
for cow in data:
    print(','.join(map(str, cow)))

生成结果:

1,2,3
4,5,6
7,8,9

解析

s = """1,2,3
4,5,6
7,8,9
"""

cows = s.splitlines()

data = []
for cow in cows:
    items = cow.split(',')
    data.append(items)
# data
# [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]

但是显示的数据可能不这么理想,比如其中的某一项有 , 的时候就会有问题了。

CSV 格式

CSV 中有几个概念需要先了解下。CSV 虽然是 Comma-separated values 但并不一定用逗号来分隔,也可以用其他的来分隔。同时 CSV 也没有一个明确的规范。

Python 的 csv 的文档中看到的一些关键术语:

  • delimiter,最基本的分隔符

  • quotechar,如果某个 item 中包含了分隔符,应该用 quotechar 把它包裹起来

  • doublequote,如果某个 item 中出现了 quotechar 那么可以把整个内容用 quotechar 包裹,并把 quotechar double 一下用来做区分

  • escapechar,如果不用 doublequote 的方法还可以用 escapechar 来辅助

  • lineterminator,每一行的结束符,默认的是 \r\n

  • quoting,可以选择任何时候都使用 quotechar 来包裹内容,或者是需要用到的时候再用,或者不用

  • skipinitialspace,是否忽略分隔符后面跟着的空格

  • strict,这个是 Python 自己的,是否抛要异常

(上面的可能没有覆盖所有的细节,但大概就是这样的情况)

CSV Wiki 中的 Basic rules 和 Example 写的很清晰。

使用 Python 的 csv 库

13.1. csv — CSV File Reading and Writing — Python 2.7.12 documentation

很简单的例子就是

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print row
import csv
with open('some.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(someiterable)

另外这里面有个 dialect 的概念,就是用一个 dialect 来定义上面提到的那些解析规则。

可以自己注册(csv.register_dialect )、列出所有的(csv.list_dialects)、获取某个(csv.get_dialect)。

默认是用逗号分隔的 excel 的 dialect,所以如果没有特殊情况应该直接使用默认值就够了。

其他

这次先只把基本概念了解下,后面可能还有文件编码之类的坑,到时遇到了再回来更新。

参考


常伟佳
310 声望16 粉丝

引用和评论

0 条评论