python 寫入csv亂碼問(wèn)題解決方法
需求背景
最近為公司開發(fā)了一套郵件日?qǐng)?bào)程序,郵件一般就是表格,圖片,然后就是附件。附件一般都是默認(rèn)寫到txt文件里,但是PM希望郵件里的附件能直接用Excel這種軟件打開,最開始想保存為Excel,但是一想Excel的文件體積會(huì)多出好多倍,csv文件默認(rèn)也是使用Excel打開的,但是根本還是文本文件,體積小,保存也方便,于是最終決定使用csv模塊來(lái)保存文件。
Python寫csv文件
Python提供了內(nèi)置模塊讀寫csv文件,這里我只用到了寫,讀這里就不做介紹了,也不難,主要是解決亂碼問(wèn)題。
def save2csv(file_name=None, header=None, data=None):
"""
保存成CSV格式文件,方便Excel直接打開
:param file_name: 保存的文件名
:param header: 表頭,每一列的名字
:param data: 具體填充數(shù)據(jù)
: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文件失敗,數(shù)據(jù)為空或者不是數(shù)據(jù)類型')
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編碼格式的
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
python實(shí)現(xiàn)飛機(jī)大戰(zhàn)(面向過(guò)程)
這篇文章主要為大家詳細(xì)介紹了python面向過(guò)程實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
幾個(gè)提升Python運(yùn)行效率的方法之間的對(duì)比
這篇文章主要介紹了幾個(gè)提升Python運(yùn)行效率的方法之間的對(duì)比,包括使用Cython和PyPy等這些熱門方法,需要的朋友可以參考下2015-04-04
Python使用LSTM實(shí)現(xiàn)銷售額預(yù)測(cè)詳解
大家經(jīng)常會(huì)遇到一些需要預(yù)測(cè)的場(chǎng)景,比如預(yù)測(cè)品牌銷售額,預(yù)測(cè)產(chǎn)品銷量。本文給大家分享一波使用?LSTM?進(jìn)行端到端時(shí)間序列預(yù)測(cè)的完整代碼和詳細(xì)解釋,需要的可以參考一下2022-07-07
Python從單元素字典中獲取key和value的實(shí)例
今天小編就為大家分享一篇Python從單元素字典中獲取key和value的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù)示例
這篇文章主要介紹了python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù),結(jié)合實(shí)例形式Fenix了python3 BeautifulSoup模塊進(jìn)行數(shù)據(jù)的抓取相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
基于spring boot 日志(logback)報(bào)錯(cuò)的解決方式
今天小編就為大家分享一篇基于spring boot 日志(logback)報(bào)錯(cuò)的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
通過(guò)python連接Linux命令行代碼實(shí)例
這篇文章主要介紹了通過(guò)python連接Linux命令行代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02

