简单的生成和读取 CSV
CSV 文件格式
使用 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 虽然是 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 写的很清晰。
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,所以如果没有特殊情况应该直接使用默认值就够了。
这次先只把基本概念了解下,后面可能还有文件编码之类的坑,到时遇到了再回来更新。
Comma-separated values - Wikipedia, the free encyclopedia
PEP 305 -- CSV File API | Python.org
13.1. csv — CSV File Reading and Writing — Python 2.7.12 documentation