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


相关文章
|
7月前
|
存储 JSON 关系型数据库
Pandas载入txt、csv、Excel、JSON、数据库文件讲解及实战(超详细 附源码)
Pandas载入txt、csv、Excel、JSON、数据库文件讲解及实战(超详细 附源码)
149 0
|
2月前
|
存储 Python
CSV文件
【10月更文挑战第18天】CSV文件
121 2
|
7月前
|
Java Apache
导出csv格式的文件
导出csv格式的文件
68 0
|
4月前
|
存储 Python
使用CSV模块读取CSV文件--含代码
使用CSV模块读取CSV文件--含代码
48 0
|
数据处理
R|批量循环处理同一格式文件-csv,txt,excel
R|批量循环处理同一格式文件-csv,txt,excel
127 0
|
测试技术 数据安全/隐私保护
|
测试技术
自动化测试教程(12)读取csv文件
2.读取步骤:(1)导入CSV代码库;(2)以只读形式打开文件;(3)由于打开文件的数据不能直接查看,所以要进行格式转换;(4)使用for循环打印除第一行标题
自动化测试教程(12)读取csv文件
|
存储 数据挖掘 数据库
|
关系型数据库 数据库 PostgreSQL
导出CSV文件
导出CSV文件
388 0
es数据导出csv文件
es数据导出csv文件