abstract:需求背景最近為公司開發(fā)了一套郵件日報程序,郵件一般就是表格,圖片,然后就是附件。附件一般都是默認(rèn)寫到txt文件里,但是PM希望郵件里的附件能直接用Excel這種軟件打開,最開始想保存為Excel,但是一想Excel的文件體積會多出好多倍,csv文件默認(rèn)也是使用Excel打開的,但是根本還是文本文件,體積小,保存也方便,于是最終決定使用csv模塊來保存文件。Python寫csv文件Python提供了
需求背景
最近為公司開發(fā)了一套郵件日報程序,郵件一般就是表格,圖片,然后就是附件。附件一般都是默認(rèn)寫到txt文件里,但是PM希望郵件里的附件能直接用Excel這種軟件打開,最開始想保存為Excel,但是一想Excel的文件體積會多出好多倍,csv文件默認(rèn)也是使用Excel打開的,但是根本還是文本文件,體積小,保存也方便,于是最終決定使用csv模塊來保存文件。
Python寫csv文件
Python提供了內(nèi)置模塊讀寫csv文件,這里我只用到了寫,讀這里就不做介紹了,也不難,主要是解決亂碼問題。
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編碼格式的
更多關(guān)于python 寫入csv亂碼問題解決方法請關(guān)注PHP中文網(wǎng)(ipnx.cn)其他文章!