首頁 >後端開發 >Python教學 >使用python產生csv亂碼問題解決方法

使用python產生csv亂碼問題解決方法

高洛峰
高洛峰原創
2017-03-16 16:11:401597瀏覽

需求背景

最近為公司開發了一套郵件日報程序,郵件一般就是表格#,圖片,然後是附件。附件通常都是預設寫到txt檔案裡,但是PM希望郵件裡的附件能直接用Excel這種軟體打開,最開始想儲存為Excel,但是一想Excel的檔案體積會多出好多倍,csv檔案預設也是使用Excel打開的,但是根本還是文字文件,體積小,保存也方便,於是最後決定使用csv模組來保存文件。

Python寫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)

注意:有三句話就是為了防止亂碼的

file_obj = open(file_name, 'wb')
file_obj.write(codecs.BOM_UTF8) # 防止乱码
writer = csv.writer(file_obj)

在文件頭寫入codecs.BOM_UTF8就能防止亂碼了,文件都是utf-8編碼格式的

以上是使用python產生csv亂碼問題解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn