1. 程式人生 > >Python模塊、字符編碼、文件讀寫

Python模塊、字符編碼、文件讀寫

打開文件 循環 亂碼 pen 存儲 多語 開頭 pip 覆蓋

模塊

當我們用一種語言開始真正的軟件開發室,除了編寫代碼外,還需要很多基本的已經寫好的現成的東西,高級語言通常都會為我們提供了一個比較完善的基礎代碼庫,讓我們能直接調用,python也不例外,為我們提供了分成完善的基礎代碼和第三方庫。在python中一個.py文件就是一個模塊。

模塊導入使用import

技術分享圖片
獲取隨機數模塊

技術分享圖片
調用系統命令

技術分享圖片
把執行腳本時傳遞的參數獲取到了

當我們試圖加載一個模塊時,Python會在指定的路徑下搜索對應的.py文件,如果找不到,就會報錯,默認情況下,Python解釋器會搜索當前目錄、所有已安裝的內置模塊和第三方模塊,搜索路徑存放在sys模塊的path變量中
技術分享圖片
sys.path

在Python中,安裝第三方模塊,是通過包管理工具pip完成的
技術分享圖片
安裝第三方庫

字符串編碼

因為計算機只能處理二進制數字,如果要處理文本,就必須先把文本轉換為二進制數字才能處理。

由於計算機是美國人發明的,因此,最早只有127個字符被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼

計算機漂洋過海來到中國後,問題來了,計算機不認識中文,當然也沒法顯示中文,但是要處理中文顯然一個字節是不夠的,至少需要兩個字節,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312編碼,用來把中文編進去,但是漢字太多了,GB2312也不夠用,經過擴展之後的編碼稱為GBK標準。

全世界有上百種語言,各國有各國的標準,就會不可避免地出現沖突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。因此,Unicode應運而生。Unicode把所有語言都統一到一套編碼裏,這樣就不會再有亂碼問題了。現代操作系統和大多數編程語言都直接支持Unicode。

但是Unicode是用兩個字節來表示一個字符,而ASCII編碼是1個字節,新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不劃算。基於此,美利堅的科學家們提出來UTF-8,UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。另外,ASCII編碼其實可以看成是UTF-8編碼的一部分。

在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換為UTF-8、GBK等編碼。

我們的文本編輯器軟件都有默認的保存文件的編碼方式,比如utf8,比如gbk。當我們點擊保存的時候,這些編輯軟件已經"默默地"幫我們做了編碼工作,那當我們再打開這個文件時,軟件又默默地給我們做了解碼的工作,將數據再解碼成unicode,然後就可以呈現給用戶了!

我們的文本編輯器有自己默認的編碼解碼方式,我們的解釋器也有默認的編碼方式,python2默認ASCII碼,python3默認的utf8,可以通過如下方式查詢
技術分享圖片
sys.getdefaultencoding()

由於Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行

技術分享圖片
聲明

第一行註釋是為了告訴Linux系統,這是一個Python可執行程序,Windows系統會忽略這個註釋;第二行註釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼.

python中可以通過encode() 方法以指定的編碼格式編碼字符串,decode()方法是解碼
技術分享圖片
encode()和decode()

文件讀寫

文件讀寫使用Python內置的open()函數,傳入文件名、標示符和字符編碼

“r”開放閱讀(不填寫標示符默認是讀取),read()讀取文件,記得一定要關閉close()
技術分享圖片
read()

技術分享圖片
readline()讀一行
技術分享圖片
readlines()以列表形式全部讀取

技術分享圖片
循環方式讀取
技術分享圖片
tell()和seek()

技術分享圖片
可以使用readable()和writable()判斷文件是否可讀寫

“w”開放寫作,文件不存在創建文件,文件存在覆蓋寫入

技術分享圖片
write()

技術分享圖片
file2

技術分享圖片
write()執行過程是先寫入內存,等close()之後再寫入硬盤,如果要邊寫邊保存,需要使用flu

技術分享圖片
可以使用readable()和writable()判斷文件是否可讀寫

“x”創建一個新文件並將其打開以供寫作,文件存在報錯

技術分享圖片
“x”

“a”用於書寫,如果存在,則附加到文件的末尾。

技術分享圖片
追加模式

技術分享圖片
可以使用readable()和writable()判斷文件是否可讀寫

"+" 表示可以同時讀寫某個文件,r+可讀可寫,w+可寫可讀,a+可寫可讀

技術分享圖片
“+”

"U"表示在讀取時,可以將 自動轉換成 (與 r 或 r+ 模式同使用)
技術分享圖片
"U"

"b"表示處理二進制文件(rb、wb、ab)
技術分享圖片
"b"

為了避免打開文件忘了關閉,python可以通過with語句來自動幫我們調用close(),當with代碼塊執行完畢時,內部會自動關閉並釋放文件資源

技術分享圖片
with

技術分享圖片
最後,如果你跟我一樣都喜歡python,想成為一名優秀的程序員,也在學習python的道路上奔跑,歡迎你加入python學習群:839383765 群內每天都會分享最新業內資料,分享python免費課程,共同交流學習,讓學習變(編)成(程)一種習慣!

Python模塊、字符編碼、文件讀寫