1. 程式人生 > >python初識05-文件處理

python初識05-文件處理

文本文件 編輯器 硬盤 計算 符號 字符 編寫程序 這就是 識別

  文件是操作系統中的一個虛擬概念。文件是以計算機硬盤為載體存儲在計算機上的信息集合,文件可以是文本文檔、圖片、程序,等等。在系統運行時,計算機以進程為基本單位進行資源的調度和分配;而在用戶進行的輸入、輸出中,則以文件為基本單位。大多數應用程序的輸入都是通過文件來實現的。

  在初期編寫程序時,接觸最多的是文本文件,比如,在註冊和登錄功能中,用戶名和密碼要存儲在文件裏,python程序也是寫成文本文件的形式。

執行一個python文件的過程:

  ? Cpython解釋器加載到內存

  ? py文件從硬盤加載到內存

  ? Cpython解釋器向CPU發出指令,處理py文件,逐行識別文本的語法

打開一個文本文檔的過程:

  ? 1 ?啟動文本編輯器(程序加載到內存),開始編輯,編輯時我們看到即時輸入的內容是存在了內存

  ? 2 ?在輸入→顯示的過程中,涉及到中文字符→二進制→中文字符的過程

  ? 3 ?寫完保存,編輯器把內存中的數據保存到硬盤

首先來討論一下? 2 ?,字符→二進制→字符的過程,就是編碼(encode)(輸入),解碼(decode)(輸出),的過程。

  最開始計算機出現,只在英文環境裏使用,所以編碼解碼只考慮英文字符和二進制,具體用哪些二進制數字表示哪個符號,經最早的這批人達成一致,這就是ASCII碼。

  後來計算機普及,每個國家都產生了自己的語言與二進制的對應標準,比如中國的GBK,因為各個國家不統一,導致了這樣的問題:漢語國家編寫的軟件,在其他語系國家裏不能使用,因為他們的計算機中沒有漢語字符與二進制的對照關系!為了解決這樣的問題,各國統一,unicode碼誕生了,它將很多國家的字符與二進制的關系都包含在內,統一使用16位二進制數字表示各國字符。

  結果就是,我們在自己的電腦文本編輯器裏輸入一個日文字符,編碼到內存,顯示(輸出)的時候,這16位二進制數字會解碼成日文,顯示出來,而不會出現亂碼的問題。

  可是再後來,使用計算機的過程中,又發現了新問題:在英語系國家的編程者發現,原來采用ASCII碼,用8位二進制表示字符,而現在需要16位,輸入的數據存入硬盤的時間幾乎長了一倍!為了解決這樣的問題,又出現了UTF-8(8-bit Unicode Transformation Format),這是一種針對Unicode的可變長度字符編碼,它會識別unicode編碼的二進制表示的字符是什麽語言的字符,並分配不同的字節,比如,如果是英文,就用1個字節存儲到硬盤,如果是中文,就用3個字節存到硬盤...這是? 3 ?的過程

  有了UTF-8之後,只要我們寫一個文件,保存成utf-8編碼格式,在任何國家的電腦上也能通用,而且占的空間更小,存取更快!是不是覺得,utf-8可以完全取代unicode了!理論上的確是這樣,但這裏又存在一個歷史遺留問題了,在這之前,很多國家都用自己國家的編碼標準編寫了軟件,而utf-8裏只有與unicode 一 一對應的關系,並沒有直接和GBK,shift-jis等標準建立聯系,所以直至現在,我們的計算機內存采用的,仍然是unicode.就像python3剛推出,而很多python2的軟件都不能用python3運行,導致很多公司和個人拒絕使用python3,於是龜叔迫不得已推出python2.7一樣,我們需要unicode來作為階段性的過渡。

  但是如果以後每個人寫文件,都采用utf-8格式保存,等足夠長的時間後,就可以廢棄unicode標準了,也就不會存在因為編碼解碼而導致的程序報錯和亂碼問題!!

  這張圖可以幫助你理解編碼、解碼的過程和亂碼、報錯的原因:

技術分享圖片

python初識05-文件處理