License: Attribution-NonCommercial-ShareAlike 4.0 International
本文出自 Suzf Blog。 如未注明,均为 SUZF.NET 原创。
转载请注明:http://suzf.net/post/457
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码。
日常工作中总是需要将采集的数据保存到数据库中对以往数据的对比。下面以MySQL数据为例说明。
#!/usr/bin/env python # -*- coding:utf-8 -*- import csv import MySQLdb conn = MySQLdb.connect(host='localhost', user='root', passwd='', db='test') cur = conn.cursor() cur.execute('DROP TABLE IF EXISTS `test_csv`;') create_table = ''' CREATE TABLE `test_csv` ( `id` int(11) NOT NULL AUTO_INCREMENT, `col1` varchar(50) NOT NULL, `col2` varchar(30) DEFAULT NULL, `col3` varchar(30) DEFAULT NULL, `col4` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ''' cur.execute(create_table) csv_data = csv.reader(file('test.csv')) for row in csv_data: #print row cur.execute('INSERT INTO test_csv(col1, col2, col3, col4)' 'VALUES("%s", "%s", "%s", "%s")', row) # close the connection to the database. conn.commit() cur.close() conn.close() print "Done"
执行结果
mysql> select * from test_csv; +----+------+-------+--------+--------+ | id | col1 | col2 | col3 | col4 | +----+------+-------+--------+--------+ | 1 | '1' | 'UE1' | '6295' | '1648' | | 2 | '2' | 'UE9' | '9805' | '4542' | | 3 | '3' | 'MQ2' | 'NONE' | 'NONE' | | 4 | '4' | 'BD8' | 'NONE' | 'NONE' | | 5 | '5' | '908' | '1548' | '1099' | | 6 | '6' | 'dle' | '1548' | '1098' | | 7 | '7' | '808' | '1548' | '1099' | | 8 | '8' | '108' | '1548' | '1098' | | 9 | '9' | 'B08' | '1548' | '1098' | +----+------+-------+--------+--------+ 9 rows in set (0.00 sec)
源CSV文件
^_^[14:36:16][root@master01 ~]#cat test.csv 1,UE1,6295,1648 2,UE9,9805,4542 3,MQ2,NONE,NONE 4,BD8,NONE,NONE 5,908,1548,1099 6,dle,1548,1098 7,808,1548,1099 8,108,1548,1098 9,B08,1548,1098