python csv写文件,用Excel打开中文乱码解决
最近在學習python爬蟲,需要將爬取的數據存儲為csv格式,方便用Excel打開更直觀的分析。
(這里應用的是豆瓣的排行榜,爬蟲入門好像逃不脫這個網站,哈哈)
python 中csv的代碼段是這樣的:
import csvcsv_headers = {'劇名','評分','年份','參與評論數'} # 打開一個用來存儲數據的文件(文件可以是已經存在,也可以是不存在) f = open('douban.csv','w',encoding='utf-8') # 初始化一個csv.writer()對象 f_csv = csv.writer(f) # 將需要存儲的數據進行寫入 f_csv.writerow(csv_headers) f_csv.writerow(data)用文本編輯器打開顯示是正常的,但是用Excel打開時,發現中文字符出現了亂碼情況,如圖:
? ? ? ??
辦法一:
這種情況的出現是因為用excel 打開CSV文件時,會詢問用戶設置文件的編碼格式,但因為用戶對Excel的一些默認設置,可能導致用戶在打開csv文件時亂碼,這時需要在代碼中為生成的csv文件添加bom頭,為文件強制設置utf-8編碼格式避免用戶打開文件亂碼。
utf-8保存的csv格式文件要讓Excel正常打開的話,必須加入在文件最前面加入BOM(Byte order )。如果接收者收到以EF BB BF開頭的字節流,就知道這是UTF-8編碼了。
所以在write文件的內容數據之前,先write一下BOM。
python3+ 在寫文件之前,只需要添加一條代碼即可解決:
f_csv.writerow('\ufeff')辦法二:
也可以將encoding=‘utf-8' 改成 ’utf-8-sig',也能起到相同的效果,正常顯示中文字符。
f = open('douban.csv','w',encoding='utf-8-sig')區別如下:
1、”utf-8“ 是以字節為編碼單元,它的字節順序在所有系統中都是一樣的,沒有字節序問題,因此它不需要BOM,所以當用"utf-8"編碼方式讀取帶有BOM的文件時,它會把BOM當做是文件內容來處理, 也就會發生類似上邊的錯誤。
2、“utf-8-sig"中sig全拼為 signature 也就是"帶有簽名的utf-8”, 因此"utf-8-sig"讀取帶有BOM的"utf-8文件時"會把BOM單獨處理,與文本內容隔離開,也是我們期望的結果。
最后,用Excel打開后顯示都是正常的中文字符。(大功告成!^_^)
?
總結
以上是生活随笔為你收集整理的python csv写文件,用Excel打开中文乱码解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 使用pug(详细说明)
- 下一篇: 《Python数据分析与应用》第7章 机