csv檔案生成小工具

2021-09-20 16:37:11 字數 2863 閱讀 7271

如果用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。

使用方法:

csv測試指令碼

# coding=utf-8

importcsvtool

dp_id='62228616'

sql="select \

i.customerno as'客戶id', \

i.dp_id as'店鋪', \

min(i.created) as'第一次購買時間', \

sum(i.total_fee) as'開店至今購買總金額', \

(select m.gradefromplt_taobao_crm_member m where m.customerno=i.customernoandm.dp_id=i.dp_id limit1) as'會員等級', \

count(distinct i.tid) as'購買次數', \

count(i.oid) as'購買件數', \

group_concat(i.title  separator'||') as'商品名稱'\

fromplt_taobao_order_item i \

where i.dp_id='%s'andi.ccms_order_status=23andcreated <'2013-06-30 23:59:59'\

group by i.customerno limit5"%(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,待大家使用發現。

C 檔案複製小工具

60string newfile 定義儲存的位置,和儲存的名稱 61 62for inti 1 i convert.toint32 textbox2.text i 從textbox2中獲取要複製的次數 63 67messagebox.show 複製完成 68 69 70 view source pr...

檔案編碼解碼小工具

base64編碼解碼原理 base64編碼是用64個可見字元表示任意二進位制資料的方法。以3個8bit的字元為一組,針對每組獲取每個字元的ascii編碼,將ascii編碼轉換成8bit的二進位制,得到一組24bit的位元組 將24bit劃分為4個6bit的位元組,每個6bit的位元組高兩位補0,得到...

間隔刪除檔案小工具

工具介面如下,實現功能為一定的間隔刪除或者移動檔案。核心 如下 todo 在此新增命令處理程式 ifdef need dir cstring strdir getdlgitemtext idc edit dir,strdir if strdir.getlength else tstring sdir...