python筆記5-python2寫csv文件中文亂碼問題


前言

python2最大的坑在於中文編碼問題,遇到中文報錯首先加u,再各種encode、decode。
當list、tuple、dict里面有中文時,打印出來的是Unicode編碼,這個是無解的。
對中文編碼糾結的建議盡快換python3吧,python2且用且珍惜!

csv中文亂碼

1.open打開csv文件,用writer寫入帶有中文的數據時

  • writer寫入單行
  • writers寫入多行
# coding:utf-8
import csv

f = open("xieru.csv", 'wb')
writer = csv.writer(f)

# 需要寫入的信息
data = ["客戶名稱", "行業類型", "客戶聯系人", "職位", "聯系方式", "郵箱","地址"]

writer.writerow(data)       # 寫入單行
# writer.writerows(datas)    # 寫入多行

f.close()

2.打開csv文件,發現寫入的中文亂碼了

編碼與解碼

1.中文亂碼問題一直是python2揮之不去的痛,這里先弄清楚亂碼原因:

  • python2本身內部代碼的編碼有str和unicode兩種編碼
  • 然而文件寫入到windows系統時候,windows上的是gb2312編碼

所以就導致了亂碼問題

2.先把python里面的中文字符串decode成utf-8,再encode為gbk編碼

data.decode('utf-8').encode('gbk')

3.如果是讀取csv文件的話,就反過來:

data.decode('gbk').encode('utf-8')

解決方案

1.方案一:對字符串轉換編碼(這個太麻煩了,不推薦)

# coding:utf-8
import csv

f = open("xieru1.csv", 'wb')
writer = csv.writer(f)

# 需要寫入的信息
data = ["客戶名稱", "行業類型", "客戶聯系人", "職位", "聯系方式", "郵箱","地址"]

a = []
for i in data:
    a.append(i.decode("utf-8").encode("gbk"))

writer.writerow(a)           # 寫入單行
# writer.writerows(datas)    # 寫入多行

f.close()

2.方法二:用codecs提供的open方法來指定打開的文件的語言編碼,它會在讀取的時候自動轉換為內部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(["客戶名稱", "行業類型", "客戶聯系人", "職位", "聯系方式", "郵箱","地址"])

# 多組數據存放list列表里面
datas = [
    ["客戶名稱", "行業類型", "客戶聯系人", "職位", "聯系方式", "郵箱","地址"],
    ["客戶名稱", "行業類型", "客戶聯系人", "職位", "聯系方式", "郵箱","地址"],
    ["客戶名稱", "行業類型", "客戶聯系人", "職位", "聯系方式", "郵箱","地址"],
       ]

writer.writerows(datas)
f.close()

python自動化交流 QQ群:779429633

---------------------------------python接口自動化已出書-------------------------

全書購買地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM