天天看點

python 生成csv亂碼問題解決方法

需求背景

最近為公司開發了一套郵件日報程式,郵件一般就是表格,圖檔,然後就是附件。附件一般都是預設寫到txt檔案裡,但是PM希望郵件裡的附件能直接用Excel這種軟體打開,最開始想儲存為Excel,但是一想Excel的檔案體積會多出好多倍,csv檔案預設也是使用Excel打開的,但是根本還是文本檔案,體積小,儲存也友善,于是最終決定使用csv子產品來儲存檔案。

Python寫csv檔案

def save2csv(file_name=None, header=None, data=None):
"""
儲存成CSV格式檔案,友善Excel直接打開
:param file_name: 儲存的檔案名
:param header: 表頭,每一列的名字
:param data: 具體填充資料
:return:
"""
if file_name is None or isinstance(file_name, basestring) is False:
raise Exception('儲存CSV檔案名不能為空,并且必須為字元串類型')
if file_name.endswith('.csv') is False:
file_name += '.csv'
file_obj = open(file_name, 'wb')
file_obj.write(codecs.BOM_UTF8) # 防止亂碼
writer = csv.writer(file_obj)
if data is None or isinstance(data, (tuple, list)) is False:
raise Exception('儲存CSV檔案失敗,資料為空或者不是資料類型')
if header is not None and isinstance(header, (tuple, list)) is True:
writer.writerow(header)
for row in data:
writer.writerow(row)      
123    file_obj = open(file_name, 'wb')
file_obj.write(codecs.BOM_UTF8) # 防止亂碼
writer = csv.writer(file_obj)