1. 程式人生 > 其它 >python之字元編碼與檔案

python之字元編碼與檔案

python之字元編碼與檔案

今日學習筆記與週五回顧

字元編碼

簡介:字元編碼只針對文字檔案

字元編碼的發展史:

​ 在最初,因為計算機由美國人發明,所以美國人建立的字元編碼,是隻具備英語和二進位制數的對應關係的。他們建立的字元編碼叫做ASCII碼,其中A-Z對應數字65-90,a-z對應數字97-122.

​ 後來,各國普及了計算機,各自建立了各自的字元編碼,類似中國的GBK,擁有漢語和英文的二進位制數對應關係,各國建立了各自的編碼,在自己國家中使用是沒有太大的問題的,但是,計算機是面向國際的.

​ 最後,因為各國字元編碼不同,導致各國的計算機交流過於困難,入人們建立了萬國碼unicode,擁有世界上絕大部分國家的語言與二進位制數的對於關係。

字元編碼的實際應用

編碼與解碼

編碼:將程式設計部分中人類所能直接理解其意思或者由人類命名編寫的程式碼,轉換為由計算機才能看懂的字元程式碼。

解碼:將只有計算機才能理解的程式碼,轉換為人類可以理解並使用的字元。

編碼 encode
(變數名.encode('gbk'))
將字串進行編碼後,所打印出的值,如果由字母b開頭,那麼表示該資料為 bytes型別,即二進位制型別。


解碼 decod
(編碼後的變數名.decode('gbk'))
將被編碼後的程式碼串,通過相同的字元編碼型別,重新解釋為人類能夠理解的字元語言。


編碼解碼的作用:傳輸資料只能為二進位制,編碼解碼是檔案互動和網路傳輸的關鍵操作方法。

亂碼

產生亂碼的原因是,使用了不同的字元編碼方式去解釋不同的編碼資料。

舉例:使用韓國的euc_kr,去編碼咱們國家GBK才能解釋出來的漢字,就會出現亂碼(明明整個國家就會抄襲)。

解決方式很簡單,用當時進行編碼的字元編碼型別,重新解碼即可。

python版本差異

python2是由早年編寫出的,當時的預設編碼是ASCII碼,與python3的utm8不同。

檔案操作

檔案:作業系統將硬碟暴露給使用者進行操作的快捷方式。使用者操作檔案等同於操作硬碟。

程式碼對檔案的操作

  1. 開啟或者建立檔案
  2. 對檔案內容進行編輯
  3. 將檔案儲存在硬碟上
  4. 關閉檔案

基本語法結構

結構1
	變數名 = open()
    變數名.close()
    	
結構2
	with open() as 變數名:

檔案操作注意事項

  1. 使用路徑開啟檔案時,直接新增上r,防止特殊符號產生意義。
  2. 同文件夾中可以只寫相對路徑,同文件夾中沒有,就必須寫出絕對路徑
  3. 地址如果為input獲取,獲取值為字串,將無法新增r和引號,直接獲取即可

檔案的讀寫模式

r		read		只讀
W		write		只寫
a		append		只追加

r模式進行時,如果路徑不存在,將會直接報錯
結構:
    with open(r'檔案地址','r',encoding='utf8') as 變數名:
    print(變數名.read())
    將會一次性讀取資料夾內所有內容
    
 
w模式進行時,路徑不存在則會直接建立路徑檔案,路徑存在時會清空原先路徑下檔案的內容,然後編寫內容進去
結構:
	with open(r'檔案地址','w',wncoding='utf8') as 變數名:
    變數名.write('內容')
    
  
a模式進行時,路徑不存在也會建立路徑下的檔案,路徑存在則會將新內容新增在尾部
結構:
	with open(r'檔案地址','a', encoding='utf8') as 變數名
    變數名.write('內容') 

檔案操作模式

文字操作模式其實是t模式

r w a 完整為rt wt at

  1. 只能操作文字內檔案
  2. 該模式必須使用encoding來選擇字元編碼型別
  3. 該模式讀寫以字串為最小單位

二進位制模式

二進位制模式為b模式,可以操作任意型別的檔案

rb wb ab,使用方式與文字操作模式相同,但是不能省略b,而且不需要用encoding選擇字元編碼型別,因為他固定編碼為二進位制編碼。

檔案內建方法

read() 一次性讀取檔案內容
	1.執行後,游標停在末尾處,繼續讀取為空白
    2.檔案內容過大時,容易造成記憶體溢位
    
readine() 一次只可讀一行內容

readlines()  結果是一個列表 裡面的各個元素是檔案的一行行內容

readable()  判斷當前檔案是否可讀
支援for迴圈  一行行讀取檔案內容,記憶體中同一時刻只會有一行內容

write()  寫入檔案內容(字串或者bytes型別)

writelines()  可以將列表中多個元素寫入檔案

writable()  判斷檔案是否可寫

flush()  相當於主動按了ctrl+s(儲存)  

今日總結

學習真有趣,我愛學習!