3.14學習筆記
阿新 • • 發佈:2022-03-14
字元編碼
# 字元編碼是什麼
計算機自己能理解的語言是二進位制數,最小的資訊標識是二進位制數,8個二進位制位表示一個位元組;而我們人類所能理解的語言文字則是一套由英文字母、漢語漢字、標點符號字元、阿拉伯數字等等很多的字元構成的字符集。如果要讓計算機來按照人類的意願進行工作,則必須把人類所使用的這些字符集轉換為計算機所能理解的二進位制碼,這個過程就是編碼,他的逆過程稱為解碼。
字元編碼的發展史
#ASCII編碼: 最開始計算機在美國發明使用,需要編碼的字符集並不是很大,無外乎英文字母、數字和一些簡單的標點符號,因此採用了一種單位元組編碼系統。在這套編碼規則中,人們將所需字符集中的字元一一對映到128個二進位制數上,這128個二進位制數是最高位為0,利用剩餘低7位組成0000000001111111(0X000X7F)。0X00到0X1F共32個二進位制數來對控制字元或通訊專用字元(如LF換行、DEL刪除、BS退格)編碼,0X20到0X7F共96個二進位制數來對阿拉伯數字、英文字母大小寫和下劃線、括號等符號進行編碼。將這套字符集對映到0X00~0X7F二進位制碼的過程就稱為基礎ASCII編碼,通過這個編碼過程,計算機就將人類的語言轉化為自己的語言儲存了起來,反之從磁碟中讀取二級制數並轉化為字母數字等字元以供顯示的過程就是解碼了。
#GBK編碼:
記錄了英文、中文與數字的對應關係
1bytes(8bit)來表示英文
2bytes(16bit)來表示中文(很多時候都是3bytes)
#Euc_kr:記錄了英文、韓文與數字的對應關係
#shift_JIS:記錄了英文、日文與數字的對應關係
#unicode:萬國碼
所有的字元都是2bytes起步儲存
會浪費空間和IO時間
#utf8:萬國碼的轉換版本
"""
記憶體使用的是unicode 硬碟使用的是utf8
"""
字元編碼實際應用、
#編碼與解碼 編碼 將人類能夠讀懂的字元編碼成計算機能夠直接讀懂的字元 解碼 將計算機能夠直接讀懂的字元解碼成人類能夠讀懂的字元 s1 = '時光不負有心人' #編碼(encode方法): print(s1.encode('gbk')) #b'\xca\xb1\xb9\xe2\xb2\xbb\xb8\xba\xd3\xd0\xd0\xc4\xc8\xcb' #解碼(decode方法): s1 = b'\xca\xb1\xb9\xe2\xb2\xbb\xb8\xba\xd3\xd0\xd0\xc4\xc8\xcb' print(s1.decode('gbk'))
檔案操作簡介
# 什麼是檔案:
作業系統暴露給使用者可以直接操作硬碟的快捷方式
# 程式碼操作檔案的流程:
1.開啟檔案、建立檔案
2.編輯檔案內容
3.儲存檔案內容
4.關閉檔案
#python開啟檔案的語法結構:
1.
f = open() #用open方法開啟檔案
f.close() #需要使用close關閉IO流
2.
with open() as f:
pass #with結構會自動關閉 不需要使用close
檔案的讀寫模式
1.r read 只讀模式:只能讀不能寫 2.w write 只寫模式:只能寫不能讀 3.a append 只新增模式,在檔案的末尾新增內容 #r模式: 路徑必須存在,不然會報錯 with open(r'a.txt','r',encoding='utf8') as f print(f.read()) #一次性讀取檔案全部內容 #w模式 路徑不存在:自動建立檔案 with open(r'b.txt', 'w', encoding='utf8') as f1: f1.write('滴滴滴滴\n') 路徑存在:先清空檔案內容 之後再寫入資料 #a模式 路徑不存在:自動建立檔案 with open(r'c.txt', 'a', encoding='utf8') as f1 路徑存在:不會清空檔案內容 而是在檔案末尾等待新內容的新增 with open(r'a.txt', 'a', encoding='utf8') as f1: f1.write('來了老弟')
檔案的操作模式
t模式
文字模式 是預設的模式
r rt
w wt
a at
1.該模式只能操作文字檔案
2.該模式必須要指定encoding引數
3.該模式讀寫都是以字串為最小單位
b模式
二進位制模式 可以操作任意型別的檔案
rb 不能省略b
wb 不能省略b
ab 不能省略b
1.該模式可以操作任意型別的檔案
2.該模式不需要指定encoding引數
3.該模式讀寫都是以bytes型別為最小單位
檔案內建方法
read() # 一次性讀取檔案內容
1.執行完之後游標在檔案末尾 繼續讀取沒有內容
2.當檔案內容特別大的時候 容易造成記憶體溢位(滿了)
readline() # 一次只讀一行內容
readlines() # 結果是一個列表 裡面的各個元素是檔案的一行行內容
readable() # 判斷當前檔案是否可讀
支援for迴圈 # 一行行讀取檔案內容(推薦使用) 記憶體中同一時刻只會有一行內容
write() # 寫入檔案內容(字串或者bytes型別)
writelines() # 可以將列表中多個元素寫入檔案
writable() # 判斷檔案是否可寫
flush() # 相當於主動按了ctrl+s(儲存)