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.需求:將漢字轉化爲數字
# 將 壹、貳、叄、肆、伍、陸、柒、捌、玖、拾、佰、仟
# 轉化爲 一、二、三、四、五、六、七、八、九、十、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)  # 呵呵 讀寫編碼統一後就不亂碼了
相關文章
相關標籤/搜索