Python2寫csv文件中文亂碼問題及解決方法
前言
python2最大的坑在于中文編碼問題,遇到中文報(bào)錯(cuò)首先加u,再各種encode、decode。
當(dāng)list、tuple、dict里面有中文時(shí),打印出來的是Unicode編碼,這個(gè)是無解的。
對中文編碼糾結(jié)的建議盡快換python3吧,python2且用且珍惜!
csv中文亂碼
1.open打開csv文件,用writer寫入帶有中文的數(shù)據(jù)時(shí)
writer寫入單行writers寫入多行
# coding:utf-8 import csv f = open("xieru.csv", 'wb') writer = csv.writer(f) # 需要寫入的信息 data = ["客戶名稱", "行業(yè)類型", "客戶聯(lián)系人", "職位", "聯(lián)系方式", "郵箱","地址"] writer.writerow(data) # 寫入單行 # writer.writerows(datas) # 寫入多行 f.close()
2.打開csv文件,發(fā)現(xiàn)寫入的中文亂碼了
編碼與解碼
1.中文亂碼問題一直是python2揮之不去的痛,這里先弄清楚亂碼原因:
- python2本身內(nèi)部代碼的編碼有str和unicode兩種編碼
- 然而文件寫入到windows系統(tǒng)時(shí)候,windows上的是gb2312編碼
所以就導(dǎo)致了亂碼問題
2.先把python里面的中文字符串decode成utf-8,再encode為gbk編碼
data.decode('utf-8').encode('gbk')
3.如果是讀取csv文件的話,就反過來:
data.decode('gbk').encode('utf-8')
解決方案
1.方案一:對字符串轉(zhuǎn)換編碼(這個(gè)太麻煩了,不推薦)
# coding:utf-8 import csv f = open("xieru1.csv", 'wb') writer = csv.writer(f) # 需要寫入的信息 data = ["客戶名稱", "行業(yè)類型", "客戶聯(lián)系人", "職位", "聯(lián)系方式", "郵箱","地址"] a = [] for i in data: a.append(i.decode("utf-8").encode("gbk")) writer.writerow(a) # 寫入單行 # writer.writerows(datas) # 寫入多行 f.close()
2.方法二:用codecs提供的open方法來指定打開的文件的語言編碼,它會(huì)在讀取的時(shí)候自動(dòng)轉(zhuǎn)換為內(nèi)部unicode (推薦)
# coding:utf-8 import csv, codecs import sys reload(sys) sys.setdefaultencoding('utf8') f = codecs.open("xx.csv", 'wb', "gbk") writer = csv.writer(f) writer.writerow(["客戶名稱", "行業(yè)類型", "客戶聯(lián)系人", "職位", "聯(lián)系方式", "郵箱","地址"]) # 多組數(shù)據(jù)存放list列表里面 datas = [ ["客戶名稱", "行業(yè)類型", "客戶聯(lián)系人", "職位", "聯(lián)系方式", "郵箱","地址"], ["客戶名稱", "行業(yè)類型", "客戶聯(lián)系人", "職位", "聯(lián)系方式", "郵箱","地址"], ["客戶名稱", "行業(yè)類型", "客戶聯(lián)系人", "職位", "聯(lián)系方式", "郵箱","地址"], ] writer.writerows(datas) f.close()
python寫入csv文件時(shí)的亂碼問題
今天在使用python的csv庫將數(shù)據(jù)寫入csv文件時(shí)候,出現(xiàn)了中文亂碼問題,解決方法是在寫入文件前,先指定utf-8編碼,如下:
import csv import codecs if __name__ == "__main__": file_name = "data.csv" with open(file_name, "wb") as f: f.write(codecs.BOM_UTF8) csv_write = csv.writer(f) csv_write.writerows([["姓名", "年齡"], ["張三", 18]])
得到csv文件,正確的顯示了中文。
到此這篇關(guān)于python寫入csv文件時(shí)的亂碼問題的文章就介紹到這了,更多相關(guān)python寫入csv文件亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python將多個(gè)list合并為1個(gè)list的方法
今天小編就為大家分享一篇Python將多個(gè)list合并為1個(gè)list的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06用Python實(shí)現(xiàn)QQ游戲大家來找茬輔助工具
這是一個(gè)用于QQ大家來找茬(美女找茬)的輔助外掛,開發(fā)的原因是看到老爸天天在玩這個(gè)游戲,分?jǐn)?shù)是慘不忍睹的負(fù)4000多。本來是想寫個(gè)很簡單的東西,但由于過程中老爸的多次嘲諷,逼得我不得不盡力完善,最后形成了一個(gè)小小的產(chǎn)品。2014-09-09利用Python進(jìn)行音頻信號處理和音樂生成的代碼示例
隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,音頻信號處理和音樂生成逐漸成為了Python程序員們的關(guān)注點(diǎn),本文將介紹如何利用Python進(jìn)行音頻信號處理和音樂生成,包括基本概念、常用庫的使用以及實(shí)際的代碼示例,需要的朋友可以參考下2024-06-06使用Python實(shí)現(xiàn)跳一跳自動(dòng)跳躍功能
這篇文章主要介紹了使用Python實(shí)現(xiàn)跳一跳自動(dòng)跳躍功能,本文圖文并茂通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07Pycharm搭建Django項(xiàng)目詳細(xì)教程(看完這一篇就夠了)
這篇文章主要給大家介紹了關(guān)于Pycharm搭建Django項(xiàng)目的詳細(xì)教程,想要學(xué)習(xí)的小伙伴看完這一篇就夠了,pycharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時(shí)提高其效率的工具,需要的朋友可以參考下2023-11-11Appium自動(dòng)化測試實(shí)現(xiàn)九宮格解鎖
本文主要介紹了Appium自動(dòng)化測試實(shí)現(xiàn)九宮格解鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02