python數據類型轉換及字符編碼


 
        

數據類型轉換

# 1.哪些類型可以轉化為數字
res = int('10')
print(res)
res = int('-3')
print(res)
res = float('.15')
print(res)
res = float('-.15')
print(res)
res = float('-3.15')
print(res)
# 作業:判斷所有能被轉換為數字類型的字符串,並轉化

# 2.數字轉化字符串
print(str(10))

# 3.字符串與列表相互轉換 ******
s = 'abc123呵呵'
print(list(s))  # ['a', 'b', 'c', '1', '2', '3', '呵', '呵'] 沒有對應的 str(ls)
ls = ['a', 'b', 'c', '1', '2', '3', '呵', '呵']
n_s = ''.join(ls)
print(n_s)  # 'abc123呵呵'

# s1 = 'a b c 1 2 3 呵 呵'
# res = s1.split() # 默認按空格拆
s1 = 'a b c 1 2 3 呵 呵'
res = s1.split()
print(res)

# 必須掌握
s2 = 'ie=UTF-8&wd=你好帥'
res = s2.split('&')
print(res)  # ['ie=UTF-8', 'wd=你好帥']

ls2 = ['ie=UTF-8', 'wd=你好帥']
n_s2 = '@'.join(ls2)
print(n_s2)  # ie=UTF-8@wd=你好帥

# 4.需求:"ie=UTF-8&wd=你好帥" => [('ie', 'UTF-8'), ('wd', '你好帥')]
res = []
s4 = "ie=UTF-8&wd=你好帥"
ls4 = s4.split('&')  # ['ie=UTF-8', 'wd=你好帥']
for ele in ls4:  # v = ie=UTF-8 | wd=你好帥
   k, v = ele.split('=')  # k: ie v: UTF-8
   res.append((k, v))
print(res)

# 5.需求:"ie=UTF-8&wd=你好帥" => {'ie': 'UTF-8', 'wd': '你好帥'}
res = {}
s5 = "ie=UTF-8&wd=你好帥"
ls5 = s5.split('&')  # ['ie=UTF-8', 'wd=你好帥']
for ele in ls5:  # v = ie=UTF-8 | wd=你好帥
   k, v = ele.split('=')  # k: ie v: UTF-8
   res[k] = v
print(res)

# 6.需求:[('ie', 'UTF-8'), ('wd', '你好帥')] => {'ie': 'UTF-8', 'wd': '你好帥'}
res = {}
ls6 = [('ie', 'UTF-8'), ('wd', '你好帥')]
for k, v in ls6:
   res[k] = v
print(res)

# 7.list與tuple、set直接相互轉化 - 直接 類型()

# 8.需求:將漢字轉化為數字
# 將 壹、貳、叄、肆、伍、陸、柒、捌、玖、拾、佰、仟
# 轉化為 1、2、3、4、5、6、7、8、9、10、100、100
# 作業:壹仟捌佰玖拾叄 => 1893

num_map = {
   '壹': 1,
   '貳': 2,
   '仟': 1000
}
ls8 = ['貳', '壹', '仟']
res = []
for v in ls8:
   num = num_map[v]  # 通過key去映射表拿到對應的值,完成 '貳' => 2
   res.append(num)
print(res)

 

字符編碼

# 數據 從 硬盤 => 內存 => cpu
# 應用程序打開文本文件的三步驟
# 1.打開應用程序
# 2.將數據加載到內存中
# 3.cpu將內存中的數據直接翻譯成字符顯示給用戶

# python解釋器
# 1.打開python解釋器
# 2.將數據加載到內存中
# 3.cpu將內存中的數據解釋執行將結果顯示給用戶,如何解釋執行不能通過,將錯誤信息提供給用戶

# 編碼的發展史
# 電腦只能識別高低電頻對應的0,1信息 => 問題:如何將世間萬物信息存放到內存中
# 世間萬物信息 => 0,1形式的數據 => 電腦中存放,將該過程逆向操作,就是訪問已存儲的數據信息

# 編碼表
# 人能識別的字符 <=> 機器能識別的字符:一定存在一種固定的對應關系
# 編碼表:一定范圍內人能識別的字符與機器能識別的字符形成的對應關系表(映射表)

# 1.ASCII表:英文字母、英文符號、數字與機器能識別的字符的對應關系表,8個二進制位就能存放完這所有的對應關系 => 1字節
#       python2采用的默認編碼是ASCII,早期並不支持中文編程
# 2_1.GBK:中文與與機器能識別的字符的對應關系表(完全兼容ASCII表),16個二進制位能存放所有漢字與ASCII之前的對應關系 => 2個字節
#       2個字節能否存放常用漢字 => 16個二進制位 2^15
#       print(pow(2, 15))
# 2_2.Shift_JIS | Euc-kr:日文 | 韓文 與機器能識別的字符的對應關系表(完全兼容ASCII表)

# 亂碼:存的編碼格式與取的編碼格式不一致
# 3.Unicode萬國碼:世間中常用國家的常用字符與機器能識別的字符的對應關系表

# 轉碼:Unicode存在漢字與二進制對應關系,GBK也存在漢字與二進制對應關系,將GBK存放的數據轉存到Unicode數據

# 均采用Unicode編碼表,只是存放數據采用字節數不一致,utf-8與utf-16是Unicode編碼表的兩種體現方式
# utf-8:以1個字節存放英文,以3 | 6個字節存放漢字,在英文數據過多時,更深空間,用來傳輸效率更高
# utf-16:所有支持的符號都采用2個字節存放,讀存數據采用定長,不用計算,讀存效率高

# 硬盤到內存需要數據的傳輸,內存到CPU需要數據的傳輸,所有都采用utf-8
# 內存需要高速讀寫,采用utf-16

# 學習的結晶:編碼與解碼要統一編碼
# 操作文本字符
res = "漢字呵呵".encode('utf-8')  # 編碼:將普通字符串轉化為二進制字符串
print(res)  # b'\xe6\xb1\x89\xe5\xad\x97\xe5\x91\xb5\xe5\x91\xb5'

res = b'\xe5\x91\xb5\xe5\x91\xb5'.decode('GBK')  # 解碼:將二進制字符串轉化為普通字符串
print(res)  # 鍛靛懙 亂碼了
res = b'\xe5\x91\xb5\xe5\x91\xb5'.decode('utf-8')
print(res)  # 呵呵 讀寫編碼統一后就不亂碼了

 

 

 

 



免責聲明!

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



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