Python入門(17/18)
第十七節 檔案
大家好!今天我們要講一個重要的Python操作對象:檔案。
關于程式中的互動的行為我們其實一直都在發生,比如,當你要擷取使用者的輸入内容,并向使用者列印出一些傳回的結果,就會用到了 input() 與 print() 函數。
但是,我們有時會遇到一些需要持久化的資訊,除了使用資料庫以外,還有沒有一些簡單、靈活的方法呢?答案是有的。那就是今天我們要講的python的檔案。
1、回顧一下:input()與print()
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5yNthndlpnewhDOvwlM0UDO3czNtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
說明:本例,我們用到了字元串的切片操作來實作文本翻轉功能。如前所述,我們可以通過使用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:讀取或寫入檔案的能力取決于你指定以何種方式打開檔案。
- name:檔案名。
- mode:打開檔案的模式:隻讀,寫入,追加等(更多...)。預設為隻讀(r)。
- buff:0-不寄存,1-寄存,>1的整數,寄存區大小。負值,緩沖大小為系統預設。
檔案打開模式有:閱讀模式( 'r' )、寫入模式( 'w' )、追加模式( 'a' )、文本讀取模式( 't' )、二進制讀取模式( 'b' )。通過 help(open) 可以檢視更多其他模式和細節。預設情況下, open() 會将檔案視作文本讀取方式打開。
3、Pickle
檔案操作的确很友善,那麼,除了文本内容以外,其他資料類型的對象,我們有沒有辦法也存儲到一個檔案中去呢?
是的,有的!似乎隻要你有需求,Python就為你準備好了解決方案。
通過導入 Pickle 子產品,你可以将任何純 Python 對象存儲到一個檔案中,并在稍後将其取回,這也叫持久地存儲對象。
封裝:
首先通過 open 以寫入(w)二進制(b)模式打開檔案,然後調用 pickle 子產品的 dump 函數。這一過程被稱作封裝(Pickling)。
拆封:
然後,我們通過 pickle 子產品的 load 函數接收傳回的對象。這個過程被稱作拆封(Unpickling)。
4、Unicode
大家有沒有注意到,我們編寫的代碼,一直都隻用英文或數字。那遇到非英文,比如:中文,怎麼辦呢?
通常我們會引入unicode編碼格式來解決中文的識别和顯示問題,如下面的代碼。其中,class就表示類,即類型。class ‘str’,顯示為字元串的類型。
使用 unicode 編碼的字元串,都以字母 u 開頭,例如 u"hello world",但在python3以後,其實并不需要這麼麻煩,預設都是unicode編碼 。
5、utf-8
當我們讀取未知檔案或寫入非英文字元檔案時,我們需要在open()中将 Unicode 字元指定為“UTF-8”編碼格式,建議将 # encoding = utf-8 這一注釋,習慣性的放置在程式的頂端。
小結
本節課程,我們讨論了有關輸入和輸出的多種類型,包括臨時的,和可持久化的,比如檔案處理,以及有關 pickle 子產品,還有關于 Unicode知識等等。
如果大家有興趣,建議各位使用python獨立開發一款自己的“通訊錄”,怎麼樣?
任何問題可以在後面的留言中提出來讨論。當你獨立完成這個項目以後,你應該自信自己已經成為了一個真正的python程式員了。
要想成為一名優秀的程式員,最重要的途徑就是:多寫代碼!接下來,我們在下一集的擴充知識中,我們還将分享python更多有趣的功能。