天天看點

Python入門(17)

Python入門(17/18)

第十七節 檔案

大家好!今天我們要講一個重要的Python操作對象:檔案。

關于程式中的互動的行為我們其實一直都在發生,比如,當你要擷取使用者的輸入内容,并向使用者列印出一些傳回的結果,就會用到了 input() 與 print() 函數。

但是,我們有時會遇到一些需要持久化的資訊,除了使用資料庫以外,還有沒有一些簡單、靈活的方法呢?答案是有的。那就是今天我們要講的python的檔案。

1、回顧一下:input()與print()

Python入門(17)

說明:本例,我們用到了字元串的切片操作來實作文本翻轉功能。如前所述,我們可以通過使用str[a:b:c] 來從位置 a 開始到位置 b 結束來對序列進行切片 。c是切片的步長(Step)。預設的步長為 1 ,它會傳回一份連續的文本。如果給定一個負數步長,如 -1 ,将傳回翻轉過的文本。

2、檔案操作函數:open()、read() 、readline()、write()、close()

(1)可以通過open()函數,建立(也就是“打開”)一個屬于 file 檔案類的對象。

(2)可以通過 read() 、readline()、write() 等方法來讀取或寫入檔案。

(3)當你完成了檔案使用,你可以調用 close()方法來關閉該檔案的操作對象。

PS:讀取或寫入檔案的能力取決于你指定以何種方式打開檔案。

Python入門(17)
  • name:檔案名。
  • mode:打開檔案的模式:隻讀,寫入,追加等(更多...)。預設為隻讀(r)。
  • buff:0-不寄存,1-寄存,>1的整數,寄存區大小。負值,緩沖大小為系統預設。

檔案打開模式有:閱讀模式( 'r' )、寫入模式( 'w' )、追加模式( 'a' )、文本讀取模式( 't' )、二進制讀取模式( 'b' )。通過 help(open) 可以檢視更多其他模式和細節。預設情況下, open() 會将檔案視作文本讀取方式打開。

3、Pickle

Python入門(17)
Python入門(17)
Python入門(17)

檔案操作的确很友善,那麼,除了文本内容以外,其他資料類型的對象,我們有沒有辦法也存儲到一個檔案中去呢?

是的,有的!似乎隻要你有需求,Python就為你準備好了解決方案。

通過導入 Pickle 子產品,你可以将任何純 Python 對象存儲到一個檔案中,并在稍後将其取回,這也叫持久地存儲對象。

Python入門(17)

封裝:

首先通過 open 以寫入(w)二進制(b)模式打開檔案,然後調用 pickle 子產品的 dump 函數。這一過程被稱作封裝(Pickling)。

拆封:

然後,我們通過 pickle 子產品的 load 函數接收傳回的對象。這個過程被稱作拆封(Unpickling)。

4、Unicode

大家有沒有注意到,我們編寫的代碼,一直都隻用英文或數字。那遇到非英文,比如:中文,怎麼辦呢?

通常我們會引入unicode編碼格式來解決中文的識别和顯示問題,如下面的代碼。其中,class就表示類,即類型。class ‘str’,顯示為字元串的類型。

Python入門(17)

使用 unicode 編碼的字元串,都以字母 u 開頭,例如 u"hello world",但在python3以後,其實并不需要這麼麻煩,預設都是unicode編碼 。

5、utf-8

當我們讀取未知檔案或寫入非英文字元檔案時,我們需要在open()中将 Unicode 字元指定為“UTF-8”編碼格式,建議将 # encoding = utf-8 這一注釋,習慣性的放置在程式的頂端。

Python入門(17)
Python入門(17)

小結

本節課程,我們讨論了有關輸入和輸出的多種類型,包括臨時的,和可持久化的,比如檔案處理,以及有關 pickle 子產品,還有關于 Unicode知識等等。

如果大家有興趣,建議各位使用python獨立開發一款自己的“通訊錄”,怎麼樣?

任何問題可以在後面的留言中提出來讨論。當你獨立完成這個項目以後,你應該自信自己已經成為了一個真正的python程式員了。

要想成為一名優秀的程式員,最重要的途徑就是:多寫代碼!接下來,我們在下一集的擴充知識中,我們還将分享python更多有趣的功能。