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,待大家使用发现。


本文转自 Bruceweien 51CTO博客,原文链接:http://blog.51cto.com/bruceweien/1932415


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值