1. 程式人生 > 其它 >學習python,從入門到放棄(9)

學習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 了。

檔案操作

  • 簡介

    檔案操作是作業系統暴露給使用者直接操作硬碟資料的快捷方式。當使用程式碼來進行檔案操作時,就不需要依賴圖形化介面,可以實現一些相對於圖形化介面來說操作比較複雜的操作。

  • 程式碼操作流程

    1. 開啟、建立檔案
    2. 編輯檔案
    3. 儲存檔案
    4. 關閉檔案
  • 基本語法結構

    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() 用於儲存檔案。

總結

開始學習了檔案操作的內容,現在也不是非常難懂,雖然有一定難度,但是還是偏向於簡單的記憶方面。