python的格式轉換太難了。
與其說是難,具體來說應該是「每次都會忘記該怎麼處理」。所以於此記錄,總的來說是編碼+格式轉換的記錄。
經常見到的格式轉換:
bytes-str
socket、網路通訊和**的很多資料傳輸,都是使用bytes格式在傳送訊息,而同時很多時候我們也需要把這些資訊程式設計str來試著人工讀資訊。
此時使用方法:decode([編碼格式])來完成bytes到str的轉換,而str的貨真價實的編碼就是utf-8、gbk等等。
str-bytes
反過來,要把對人友好的字串等轉化到對機器友好的位元組流,用encode()方法來完成。
bytes-十六進製制數
我們通常更常用的其實是字串轉十六進製制,但bytes作為橋梁更簡單,只要組合一下就行了。
python3需要使用庫binascii來完成很多這類在python2中可直接進行的轉換,bytes轉為十六進製制數字文字,只需要使用binascii.b2a_hex()即可,具體更多用法可以在python的cmd模式下使用help(binascii)檢視。
然後就可以拿這個十六進製制數文字去加密或者其它處理。
十六進製制數-bytes
反過來使用binascii.a2b_hex()即可。
bytes的base64編碼/解碼
很多**會進一步把一些資訊用base64的方式傳輸,有的為了節約資源,有的為了讓ascii無法顯示的亂碼不至於被錯誤處理而產生誤差,總之base64是好東西。
python3自帶base64庫,import base64後,使用base64.b64encode()或base64.b64decode()來對bytes型量進行base64編碼或解碼。
一些天坑的東西
1. python開啟檔案的編碼格式
python開啟檔案很簡單,常用的比如open(),with open as之類,然而有時候會出些小問題,比如txt檔案,windows寫入和讀取txt預設都是unicode的方式(畢竟,沒記錯的話open這類函式是靠作業系統提供的中斷函式完成的),這時候,如果要寫入的文字是utf-8編碼的,就有可能報錯,有時候不報錯,但是會產生亂碼。(特別是用爬蟲爬些稀奇古怪的**的源**時候,寫入檔案很容易變成亂碼。)
所以要設定open()的編碼,在最後加上,encoding="utf-8"。可以看到成功寫入10個字元。
2.request.get時候的編碼
寫爬蟲的時候,有時候需要獲取當前網頁的源**然後進行一些其他操作,比如找其它頁面,對於一些能用偏靜態手段處理的網頁,request庫仍然是最合適的選擇,使用result=request.get(html)得到目標網頁的應答資訊,要檢視源**時,有兩種方式:一是result.text,一種是result.content。這兩種的區別在於,result.text會自動對網頁應答進行unicode編碼,這極有可能導致資訊錯誤或亂碼,而result.content則直接返回網頁應答的bytes型別資訊。在必要情況下,就算是要得到網頁某部分的文字,也應該用content獲取原始bytes資訊再自行轉為utf-8等編碼文本來使用。
python轉換格式 python格式轉換的記錄
python的格式轉換太難了。與其說是難,具體來說應該是 每次都會忘記該怎麼處理 所以於此記錄,總的來說是編碼 格式轉換的記錄。經常見到的格式轉換 bytes str socket 網路通訊和 的很多資料傳輸,都是使用bytes格式在傳送訊息,而同時很多時候我們也需要把這些資訊程式設計str來試著人...
PYTHON 格式轉換
1.檢視資料型別 data.info data.dtypes data col1 dtypes 檢視一列資料型別 2.轉換資料格式 data col1 astype str 3.轉日期 import pandas as pd data dt pd.to datetime df col1 format...
python 日期 格式轉換 英文 日期格式轉換
一 date型轉字串 filter date date,yyyymm filter date time,hh mm 在控制器中使用必須注入 filter 模組 scope.dt1 new date 控制器中使用 scope.dt2 filter date scope.dt1,yyyy mm dd h...