python中的解碼函數(shù) python 編解碼

Python 讀寫文件的編碼與解碼問題

演示文件為docx文檔,內(nèi)容如下:

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),巴州企業(yè)網(wǎng)站建設(shè),巴州品牌網(wǎng)站建設(shè),網(wǎng)站定制,巴州網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,巴州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

源碼

運(yùn)行源碼查看報錯信息

UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 15: illegal multibyte sequence

上述錯誤是一種很常見的解碼錯誤,下面介紹該錯誤的解決方法

把utf-8,gbk等各種編碼方式都試了一遍,還是沒有解決問題然后仔細(xì)看報錯信息,根據(jù)UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfb in position 14: invalid start byte,猜測文件中某個字節(jié)不能解碼,打開文件一看,并沒有看出什么問題來

open() 函數(shù)的第三個參數(shù)不是用來接收編碼方式的,而是傳入一個buffering的值,此處傳入了'gbk'字符串,所以系統(tǒng)提示傳一個整型

通過調(diào)用office的API進(jìn)行操作,因為在office上能完成的操作,都能通過win32完成,所以我們選擇使用win32

(Python3.5 需要安裝 win32compat,里面含了 win32 的很多包)

Python 中 base64 編碼與解碼

base64 是經(jīng)常使用的一種加密方式,在 Python 中有專門的庫支持。

本文主要介紹在 Python2 和 Python3 中的使用區(qū)別:

在 Python2 環(huán)境:

在 Python3 環(huán)境:

Python3 中有一些區(qū)別,因為 Python3 中字符都是 unicode 編碼,而 b64encode 函數(shù)的參數(shù)為 byte 類型,所以必須先轉(zhuǎn)碼。

以上就是本文的全部內(nèi)容,如果覺得有用的話歡迎 點贊 和 轉(zhuǎn)發(fā) ,多謝。

推薦閱讀:

python str與bytes編碼解碼

下面一張圖搞懂編碼、解碼、編碼表之間的關(guān)系。

不難看出,它們是一種根據(jù)編碼表進(jìn)行翻譯、映射的過程:

實際上,字符串類型只有encode()方法,沒有decode()方法,而bytes類型只有decode()方法而沒有encode()方法。

二進(jìn)制格式的數(shù)據(jù)也常稱為裸數(shù)據(jù)(raw data),所以str數(shù)據(jù)經(jīng)過編碼后得到raw data,raw data解碼后得到的str。

上面說了,編碼是將字符數(shù)據(jù)轉(zhuǎn)換成字節(jié)數(shù)據(jù)(raw data),解碼是將字節(jié)數(shù)據(jù)轉(zhuǎn)換成字符數(shù)據(jù)。在Python中字符數(shù)據(jù)也就是字符串,即str類型,字節(jié)數(shù)據(jù)也就是bytes類型或bytearray類型。

編碼時,可以使用字節(jié)類型的構(gòu)造方法bytes()、bytearray()來構(gòu)造字節(jié),也可以使用str類型的encode()方法來轉(zhuǎn)換。

解碼時,可以使用str類型的構(gòu)造方法str()來構(gòu)造字符串,也可以使用bytes、bytearray()類型的decode()方法。

另外需要注意的是,編碼和解碼的過程中都需要指定編碼表(字符集),默認(rèn)采用的是utf-8字符集。

例如,使用encode()的方式將str編碼為bytes數(shù)據(jù)。

使用bytes()和bytearray()將str構(gòu)造成bytes或bytearray數(shù)據(jù),這兩個方法都要求str-byte的過程中給定編碼。

實際上,bytes()、bytearray()這兩個方法構(gòu)造字節(jié)數(shù)據(jù)的時候還有點復(fù)雜,因為可以從多個數(shù)據(jù)源來構(gòu)造,比如字符串、整數(shù)值、buffer。如何使用這兩個方法構(gòu)造字節(jié)數(shù)據(jù),詳細(xì)內(nèi)容參考help(bytes)和help(bytearray)給出的說明,這里給幾個簡單示例。

構(gòu)造bytes的方式:

構(gòu)造bytearray的方式:

解碼是字節(jié)序列到str類型的轉(zhuǎn)換。

例如,使用decode()方法進(jìn)行解碼"我"字,它的utf-8的編碼對應(yīng)為"\xe6\x88\x91":

使用str()進(jìn)行轉(zhuǎn)換。

當(dāng)編碼、解碼的過程使用了不同的(不兼容的)編碼表時,就會出現(xiàn)亂碼。所以,解決亂碼的唯一方式是指定對應(yīng)的編碼表進(jìn)行編碼、解碼。

例如,使用utf-8編碼"我"字,得到一個bytes序列,然后使用gbk解碼這個bytes序列。

這里報錯了,因為utf-8的字節(jié)序列里有g(shù)bk無法解碼的字節(jié)。如果使用文本編輯器一樣的工具去顯化這個過程,得到的將是亂碼字符。

原文地址:

python基礎(chǔ)——編碼、bytes與str轉(zhuǎn)換及格式化

對于單個字符的編碼,Python提供了ord()函數(shù)獲取字符的整數(shù)表示,chr()函數(shù)把編碼轉(zhuǎn)換為對應(yīng)的字符:

最常用的編碼是UTF-8,如果沒有特殊業(yè)務(wù)要求,請牢記僅使用UTF-8編碼。

在爬蟲中會經(jīng)常遇見,需要用encode和decode來進(jìn)行互相轉(zhuǎn)碼

str轉(zhuǎn)bytes

注意,含有中文字符的str不能用acsii格式轉(zhuǎn)碼

bytes轉(zhuǎn)str

** 程序中經(jīng)常會遇到個別字符轉(zhuǎn)碼不成功而報錯,因此在decode方法中需要這個參數(shù)errors='ignore'忽略錯誤的字節(jié)

注意格式化的數(shù)據(jù)格式

【Python】淺談python中的json

一 前言 ?

最近一直在做開發(fā)相關(guān)的工作--基于Django的web 平臺,其中需要從model層傳輸數(shù)據(jù)到view 層做數(shù)據(jù)展示或者做業(yè)務(wù)邏輯處理。我們采用通用的Json格式--Json(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,易于閱讀和程序解析。

二 認(rèn)識Json

2.1 Json 結(jié)構(gòu)

常見的Json格式為 “名稱/值”對的集合,其中 值可以是對象,列表,字典,字符串等等。比如

backup_data?=?{"back_to_host":?"dbbk0",

"ip_address":?"10.10.20.3",

"host_name":?"rac4",

"port":?3306}

2.2 使用Json

Python的Json模塊序列化與反序列化的過程分別是 編碼和解碼。這兩個過程涉及到兩組不同的函數(shù)

編碼 把一個Python對象編碼轉(zhuǎn)換成Json字符串,json.dumps(data)/json.dump(data,file_handler)

解碼 把Json格式字符串解碼轉(zhuǎn)換成Python對象,json.loads(data)/json.load(file_handler)

在python中要使用Json模塊做相關(guān)操作,必須先導(dǎo)入:

import Json

2.3 主要函數(shù)

編碼函數(shù)主要有 json.dumps(data)/json.dump(data,file_handler)

json.dumps()的參數(shù)是將python對象轉(zhuǎn)換為字符串,如使用json.dumps序列化的對象json_dumps=json.dumps({'a':1, 'b':2}) ,json_dumps='{"b": 2, "a": 1}'

json.dump 是將內(nèi)置類型序列化為json對象后寫入文件。

解碼函數(shù)主要由json.loads(data)/json.load(file_handler) ?

json.loads的參數(shù)是內(nèi)存對象,把Json格式字符串解碼轉(zhuǎn)換成Python對象,json_loads=json.loads(d_json) ?#{ b": 2, "a": 1},使用load重新反序列化為dict

json.load()的參數(shù)針對文件句柄,比如本地有一個文件/tmp/test.json ?json_load=json.load(open('/tmp/test.json'))

具體案例參考如下:

In?[3]:?data={"back_to_host":?"rac1",

...:?"ip_address":?"10.215.20.3",

...:?"host_name":?"rac3",

...:?"port":?3306}

In?[7]:?json_str=json.dumps(data)

In?[8]:?print json_str

{"ip_address":?"10.215.20.3",?"back_to_host":?"rac1",?"host_name":?"rac3",?"port":?3306}

In?[9]:?json_loads=json.load(json_str)

---------------------------------------------------------------------------

AttributeError Traceback?(most recent?call?last)

ipython-input-9-180506f16431?in?module()

----?1 json_loads=json.load(json_str)

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc?in?load(fp,?encoding,?cls,?object_hook,?parse_float,?parse_int,?parse_constant,?object_pairs_hook,?**kw)

284

285?""

注意 從上面的報錯信息來看 json.loads 傳參是字符串類型,并不是文件句柄,沒有 read()屬性。

In?[10]:?json_loads=json.loads(json_str)

In?[11]:?print json_loads

{u'back_to_host':?u'rac1',?u'ip_address':?u'10.215.20.3',?u'host_name':?u'rac3',?u'port':?3306}

In?[12]:?type(json_loads)

Out[12]:?dict

In?[13]:?type(json_str)

Out[13]:?str

利用dump 將數(shù)據(jù)寫入 dump.json

In?[17]:?with open('/tmp/dump.json','w')?as f:

...:?json.dump(json_str,f)

...:

yangyiDBA:~?yangyi$ cat /tmp/dump.json

"{\"ip_address\": \"10.10.20.3\", \"back_to_host\": \"rac1\", \"host_name\": \"rac3\", \"port\": 3306}"

yangyiDBA:~?yangyi$

利用json.load 將dump.sjon的數(shù)據(jù)讀出來并賦值給 data?

In?[18]:?with open('/tmp/dump.json','r')?as f:

...:?data=json.load(f)

...:

In?[19]:?print data

{"ip_address":?"10.10.20.3",?"back_to_host":?"rac1",?"host_name":?"rac3",?"port":?3306}

三 小結(jié)

本文算是一篇學(xué)習(xí)筆記,主要對比了json.loads/json.load ?, json.dumps/ json.dump 的使用差異 ,方便以后更好的使用json 。

以上為本次分享內(nèi)容,感謝觀看。

分享題目:python中的解碼函數(shù) python 編解碼
當(dāng)前鏈接:http://muchs.cn/article22/hjchjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站網(wǎng)站排名、企業(yè)建站、網(wǎng)站策劃、移動網(wǎng)站建設(shè)微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站