思路
简单的生成和读取 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\nquoting,可以选择任何时候都使用 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,所以如果没有特殊情况应该直接使用默认值就够了。
其他
这次先只把基本概念了解下,后面可能还有文件编码之类的坑,到时遇到了再回来更新。