Python模塊、字符編碼、文件讀寫
當我們用一種語言開始真正的軟件開發室,除了編寫代碼外,還需要很多基本的已經寫好的現成的東西,高級語言通常都會為我們提供了一個比較完善的基礎代碼庫,讓我們能直接調用,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模塊、字符編碼、文件讀寫