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文件生成小工具的主要内容,如果未能解决你的问题,请参考以下文章

108:生成和下载csv文件

python 读取多个csv文件中某一列,并生成一个新csv文件

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

nzSQLException 读取超时错误

微信小程序代码片段