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

2021-03-06 從零開始學自動化測試

前言

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接口自動化測試》百度閱讀已上架,點左下角「閱讀原文」可以直接購買

python自動化學習交流QQ群:226296743

相關焦點

  • 還在為Python中文亂碼煩惱,老司機給你講講!
    這裡需要提醒一點,有人在得到一份亂碼數據(str)後試圖先對其編碼(比如utf-8),再以另外一種方式解碼(比如GB2312),這樣肯定是行不通的,原因剛才我們已經講過——編碼解碼要一致,解決中文亂碼的正確環節應該在它出現之前。
  • Python CSV 文件的讀和寫
    02CSV 文件讀寫向 CSV 文件寫入數據上面就是向 CSV 文件寫入數據的示例代碼,在這裡從以下幾個方面來分解示例代碼語句含義open 函數大家應該都知道是對文件的操作with open('data.csv
  • Excel打開csv文件出現亂碼的解決方法
    CSV文件是一種數據文件,正常情況下,我們可以直接在excel表格中打開CSV文件,不過有時也會出現亂碼,很多人不知道該如何解決。
  • python讀寫csv文件
    這樣的方式在處理制表符分隔的文件時,沒什麼問題,但是在處理csv文件時,會非常的頭痛。CSV文件格式簡單理解,是逗號分隔的純文本,但是實際上非常靈活。在excel導出的csv文件中,會遇到某個欄位內部出現了逗號的情況,這樣的字符在兩端添加雙引號來進行區分,示意如下>>> with open('file.csv') as f:... for line in f:... print(line.rstrip().split(','))...
  • 用 Python 將數據寫到 CSV 文件
    如果數據量不大,往往不會選擇存儲到資料庫,而是選擇存儲到文件中,例如文本文件、CSV 文件、xls 文件等。因為文件具備攜帶方便、查閱直觀。Python 作為膠水語言,搞定這些當然不在話下。但在寫數據過程中,經常因數據源中帶有中文漢字而報錯。最讓人頭皮發麻的編碼問題。我先說下編碼相關的知識。編碼方式有很多種:UTF-8, GBK, ASCII 等。
  • Python---讀寫CSV
    (數字和文本)讀csv文件1、首先導入CSV模板2、創建一個CSV文件對象3、打開文件進行讀取# coding:utf-8import csvf = csv.reader(open('1111.csv','r'))for i in f: print(i)代碼結果:[
  • 用Excel打開CSV格式文件亂碼,三種方法可以處理好!
    這款軟體不僅功能齊全,還可以兼容很多的文件格式。這些辦公軟體帶給我們方便,同時日常使用過程中也會出現一些問題。小編今天就有這樣一個問題,有朋友在使用office中的excel電子表格編輯工具來打開csv文件,但是他卻發現在打開的時候文件總是會顯示亂碼的情況,可對於.csv文件格式,excel是支持的,這是為什麼呢?就是這樣一個問題大家有沒有遇到過並解決好了嗎?現在小編就帶給你兩種解決的方法。
  • Python對CSV文件的處理
    在Python中,讀取csv文件使用到的標準庫是csv,直接導入就可以了,要讀取的CSV文件內容為:見讀取CSV文件裡面內容的源碼:#!/usr/bin/env python #-*-coding:utf-8-*-#author:wuyaimport  csvdef readCsv(): with open('csvTest.csv','r') as f: rander=csv.reader(f) #對數據循環獲取
  • Python讀寫csv文件專題教程(2)
    第275篇原創上篇:Python讀寫csv文件專題教程(1)2.3 通用解析框架
  • python pandas解決csv文件中的部分注釋問題
    由於通過添加注釋,文件通常可以更加清晰明了。csv文件中有注釋,這種情況是可能存在的。
  • Python讀寫csv文件專題教程(1)
    1 前言Python的數據分析包Pandas具備讀寫csv文件的功能,read_csv 實現讀入csv文件,to_csv寫入到csv文件。
  • Python 簡單操作 CSV
    感謝各位鼓勵與支持🌹🌹🌹,往期文章都在最後梳理出來了(●'◡'●)接下來就以問題的形式展開梳理👇CSV簡介CSV,「CSV 全稱 Comma-Separated Values,中文叫逗號分隔值或字符分隔值,它以純文本形式存儲表格數據(數字和文本),其本質就是一個字符序列,可以由任意數目的記錄組成,記錄之間以某種換行符分隔
  • python-pandas讀寫csv數據
    可以是單個名稱/數字或由多個名稱/數字組成的列表(層次化索引)error_bad_lines = False # 當某行數據有問題時,不報錯,直接跳過,處理髒數據時使用 na_values = 'NULL' # 將NULL識別為空值encoding='utf-8' #指明讀取文件的編碼,默認utf-8說明:① 讀取csv/txt/tsv文件,返回一個DataFrame類型的對象。
  • matplotlib中文顯示亂碼問題解決步驟
    「 本文解決Windows環境下matplotlib中文顯示亂碼問題。
  • python編解碼問題詳解
    python代碼的中文python2和python3的區別:1)type(s)查看是str類型,編碼方式:通過在文件中設定encoding=UTF-8或encoding=GBK來設定str的編碼類型。想獲得Unicode類型,需要使用decode()解碼。
  • 使用Python讀寫CSV文件
    任何支持文本文件輸入和字符串操作的語言(如Python)都可以直接使用CSV文件。讀取CSV文件內容在Python中,使用csv庫來讀取CSV文件內容。在讀文件之前,先創建一個a.csv的文件,內容是下面這樣:名字,部門,月份John Smith,Accounting,NovemberErica Meyers,IT,March文件創建完成後,開始編寫讀取文件內容的程序:import csvwith open('a.csv') as csv_file:
  • Python入門學習之數據分析實戰獲取數據
    反斜槓「 \ 」:右鍵點擊這個文件,選擇屬性,可以看到它所在的位置,默認是使用 \ 來表示,由於反斜槓「\」在Python中被定義為轉義符號,因此在寫的時候就要在路徑的最前方加一個轉義符 r,r"D:\個人\data\reviews.xlsx"斜槓「 / 」:不需要加r,全部用 / 來寫:"D:/個人/data/reviews.xlsx"兩種方式看個人習慣吧。
  • Python讀寫CSV格式文件
    CSV(Comma Separated Values)格式的文件常用於電子表格和資料庫中內容的導入和導出。
  • python入門教程06-01(python語法入門之字符編碼)
    py文件的功能,這一點與文本編輯器一樣#2、不同點:在階段3時,針對內存中讀入的內容處理方式不同,詳解如下文本編輯器將文件內容讀入內存後,是為了顯示或者編輯,根本不去理會python的語法,而python解釋器將文件內容讀入內存後,可不是為了給你瞅一眼python代碼寫的啥,而是為了執行python代碼、會識別python語法)三、字符編碼介紹3.1 什麼是字符編碼?
  • 【Python基礎】(6.1)字符編碼
    python的語法,而python解釋器將文件內容讀入內存後,可不是為了給你瞅一眼python代碼寫的啥,而是為了執行python代碼、會識別python語法),然後通過ASCII表反解成英文字符圖2圖3都是相同的過程,此時無論是存還是取由於採用的字符編碼表一樣,所以肯定不會出現亂碼問題,但問題是在美國人用的計算機裡只能輸入英文字符,而在中國人用的計算機裡只能輸入中文字符和英文字符....