csv文件生成小工具
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csv文件生成小工具相关的知识,希望对你有一定的参考价值。
运维经常遇到客户要求下载某些数据列表的需求。一般我们是提供一个csv格式的文件。
如果用shell来做这件事的,通常是两种方法:
1.捕获终端输出,后续对输出做一定处理。但是终端输出实际上已经丢失了很多格式信息,很难做到完善处理。
2.用mysql内置的FILE命令一次性生成文件。mysql内置的函数功能有限,没法做到比较好的输出格式化。
所以选择了python来做。
主要注意几点:
1.我们的数据库是使用utf8编码。所以生成的csv文件默认话就是utf8编码。实际上也不应该转码,因为utf8的unicode字符集是gbk的等字符集的超集,所以转换有可能会丢失一部分信息。
2.客户一般是使用windows的excel软件打开csv文件,excel要正确打开utf8编码的csv文件,需要文件开头有一个UTF8 BOM标记。
3.换行问题,我们在linux里面的换行符一般是"\n"。而windows的换行是"\r\n"。最好是转换一下(测试貌似不转也能用)。
4.假如字段值内部有换行怎么办?这里就需要使用双引号包裹字段。但这又引出一个问题,字段值里面有字面量的双引号怎么处理?根据csv rfc文档,应该在字面量的双引号前多加一个双引号来处理。
处理好以上几个问题后,客户应该能直接使用excel打开csv文件了。
下面是一个生成csv的小工具:csvtool.py。
使用方法:
把csvtool.py文件下载放到一个目录,在该目录下写自己的脚本,如:
csv测试脚本
# coding=utf-8 import csvtool dp_id = ‘62228616‘ sql = "SELECT \ i.customerno as ‘客户ID‘ , \ i.dp_id as ‘店铺‘ , \ min (i.created) as ‘第一次购买时间‘ , \ sum (i.total_fee) as ‘开店至今购买总金额‘ , \ (select m.grade from plt_taobao_crm_member m where m.customerno = i.customerno and m.dp_id = i.dp_id limit 1 ) as ‘会员等级‘ , \ count(distinct i.tid) as ‘购买次数‘ , \ count(i.oid) as ‘购买件数‘ , \ group_concat(i.title SEPARATOR ‘||‘ ) as ‘商品名称‘ \ from plt_taobao_order_item i \ where i.dp_id = ‘%s‘ and i.ccms_order_status = 23 and created < ‘2013-06-30 23:59:59‘ \ group by i.customerno LIMIT 5 " % (dp_id, ) generator = csvtool.CSVGenerator() generator.connect(user = ‘root‘ , db = ‘ccms_gxg‘ , passwd = ‘ ‘, host=‘ gxg‘, port = 3306 ) print "执行查询..." generator.query(sql) print "查询结束..." generator.gencsv( ‘test.csv‘ ) |
初步使用功能正常。不过也许有一些隐藏bug,待大家使用发现。
以上是关于csv文件生成小工具的主要内容,如果未能解决你的问题,请参考以下文章