转载

Python CSV 文件解析和生成

思路

  • 简单的生成和读取 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,所以如果没有特殊情况应该直接使用默认值就够了。

其他

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

参考

  • 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

原文  https://segmentfault.com/a/1190000006029896
正文到此结束
Loading...