學習python,從入門到放棄(9)
學習python,從入門到放棄(9)
字元編碼實際應用
-
編碼與解碼
編碼是將人類能夠讀懂的字元編碼成計算機能夠直接讀懂的字元
解碼是將計算機能夠直接讀懂的字元解碼成人類能夠讀懂的字元
s1 = '你好世界' print(s1.encode('gbk')) # b'\xc4\xe3\xba\xc3\xca\xc0\xbd\xe7' res = b'\xc4\xe3\xba\xc3\xca\xc0\xbd\xe7' print(res.decode('gbk')) # 你好世界
在計算機使用廣泛的今天,涉及到網路傳輸資料時,資料必須轉化為二進位制才可以傳輸,所以肯定會涉及到資料的編碼與解碼。這就讓我想到了之前在學校學過的一門學科密碼學。同樣是編碼與解碼。
-
亂碼問題
資料出現了亂碼問題,一般就是資料的解碼方式出現了問題,資料用什麼方式進行編碼,就應該用什麼方式進行解碼才對。
-
python 直譯器的編碼
python2 直譯器的預設編碼為 ASCII 碼,所以當在使用python2 直譯器時,如果字串中出現了中文,就應該在檔案最上方告訴直譯器應該使用怎麼樣的編碼方式。
或者可以在字串前面加入 u 以便告訴計算機這個字串是使用 UTF-8 編碼的。
python3中預設的就是 UTF-8 了。
檔案操作
-
簡介
檔案操作是作業系統暴露給使用者直接操作硬碟資料的快捷方式。當使用程式碼來進行檔案操作時,就不需要依賴圖形化介面,可以實現一些相對於圖形化介面來說操作比較複雜的操作。
-
程式碼操作流程
- 開啟、建立檔案
- 編輯檔案
- 儲存檔案
- 關閉檔案
-
基本語法結構
open(r'a.txt') # 相對路徑 open(r'D:\py1\day09\a.txt') # 絕對路徑 res = open(r'a.txt', 'r', encoding='utf8') print(res.read()) # 讀取檔案內容 res.close() # 關閉檔案 ''' open(檔案的路徑,檔案的操作模式,檔案的編碼) 1.檔案的路徑是必須要寫的 2.檔案的操作模式、檔案的編碼有時候不用寫 '''
因為 open 之後, close 非常容易被遺忘,造成記憶體資源被佔用,所以不太推薦使用這種方式。
推薦使用
with open(r'a.txt', 'r', encoding='utf8') as f: # f = open() data = f.read() print(data)
這種結構。
檔案的讀寫模式
-
只讀模式
只能讀取檔案,不可以修改檔案,當路徑不存在時,會報錯。
當修改檔案時,也會報錯。
-
只寫模式
只能修改檔案,不能讀取檔案。當路徑不存在時,會直接建立檔案。
讀取檔案
路徑不存在執行前
執行後
當路徑存在時,會先清空檔案中的內容後,再寫入資料。
執行前
執行後
-
只追加模式
只能在檔案末尾新增內容,同樣不能讀取內容。
執行前
執行後
檔案的操作模式
-
文字模式
是檔案的預設模式,只能操作文字檔案,當使用該模式時,必須指定 encoding 引數,上面所使用的就是這個模式, r、w、a 都對應著 rt、wt、at ,讀寫時都以字串為最小單位。
-
二進位制模式
可以操作任意型別的檔案,但是在模式上的 rb、wb、ab 不能省略 b 了,不用指定 encoding 引數,讀寫時都是以 bytes 型別為最小單位。
檔案的內建方法
read() 可以一次性讀取所有檔案內容,但是這種方法非常容易造成記憶體溢位,因為當檔案特別大時,讀取時記憶體會存不下。
readline() 一次只讀一行內容,可以解決這樣的問題,搭配迴圈語句來使用,使記憶體中同一時刻只會有一行內容。
readlines() 也會一次性讀取所有內容,但是會將每一行的內容放置在一個列表中,列表中的每個元素就是檔案中的每一行資料。
readable() 可以判斷當前的檔案是否可讀。
write() 寫入檔案內容。
writelines() 可以將列表中的多個元素寫入檔案。
writable() 判斷檔案是否可寫。
flush() 用於儲存檔案。
總結
開始學習了檔案操作的內容,現在也不是非常難懂,雖然有一定難度,但是還是偏向於簡單的記憶方面。