字符編碼及文件操作
一,字符編碼
1,什麽是字符編碼
計算機要想工作必須通電,也就是說‘電’驅使計算機幹活,而‘電’的特性,就是高低電平(高低平即二進制數1,低電平即二進制數0),也就是說計算機只認識數字
很明顯,我們平時在使用計算機時,用的都是人類能讀懂的字符(用高級語言編程的結果也無非是在文件內寫了一堆字符),如何能讓計算機讀懂人類的字符?
必須經過一個過程:
字符--------(翻譯過程)------->數字
這個過程實際就是一個字符如何對應一個特定數字的標準,這個標準稱之為字符編碼
2,字符編碼的使用
上圖所示,就是文本編輯器儲存文件和編輯文件的過程:首先運行文本編輯器這個應用軟件,然後將要打開的文件通過decode解碼成unicode形式讀到內存中。
最後儲存的時候是存到硬盤中的,為了節省資源,存儲過程中,將unicode格式的二進制數在通過encode編碼的過程存到硬盤中。
但註意的一點是:用什麽編碼就要用什麽解碼,不然就會出現亂碼的情況。
unicode跟utf-8的區別:
首先它們都是萬國碼,可以兼容各個國家的語言,但unicode把所有的語言都存成兩個字節,對於一些不需要占用兩個字節的語言來說(一個字節就可以搞定的語言)
太浪費空間,所以就產生了utf-8,它可以判斷字節的大小,從而省下了一定的內存空間,所以在硬盤中存儲一般du用utf-8,但是因為要判斷,所以運行速度明顯降低,
所以內存中就用unicode。
Python解釋器執行代碼的過程:
讀取已經加載到內存的代碼(unicode編碼的二進制),然後執行,執行過程中可能會開辟新的內存空間。
而執行過程中的編碼就可以放任何形式的編碼了,python3默認的是utf-8的格式,而python2默認的是ASCII碼格式。
可以在文件開頭用#coding:utf-8更改默認格式。
二,文件操作
1,文件操作流程
- 打開文件,得到文件句柄並賦值給一個變量
- 通過句柄對文件進行操作
- 關閉文件
2,基本操作
r 讀文件
# f=open(‘1.1.py‘,encoding=‘utf-8‘)#打開文件 # print(f.readable(),end="") #查看文件是否可讀# print(f.readline(),end="")#讀一行 # print(f.readline(),end="") # print(‘-‘*60)#這是分割線 # print(f.read())#讀剩下的文件 # f.close()#關閉文件
w寫文件
# f=open(‘wxp.txt‘,‘w‘,encoding=‘utf-8‘) # f.write(‘我有一頭小毛驢\n‘)#寫入文件 # f.writelines([‘我從來都不騎\n‘,‘有一天我心血來潮\n‘])#寫多行 # f.close()
a追加
# f=open(‘wxp.txt‘,‘a‘,encoding=‘utf-8‘) # f.write(‘騎它去趕集\n‘) # f.writelines([‘握握手\n‘,‘敬個禮\n‘]) # f.close()
3,文件打開模式
打開文件時,需要指定文件路徑和以何等方式打開文件,打開後,即可獲取該文件句柄,日後通過此文件句柄對該文件操作。
打開文件的模式有:
- r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
- w,只寫模式【不可讀;不存在則創建;存在則清空內容】
- x, 只寫模式【不可讀;不存在則創建,存在則報錯】
- a, 追加模式【可讀; 不存在則創建;存在則只追加內容】
"+" 表示可以同時讀寫某個文件
- r+, 讀寫【可讀,可寫】
- w+,寫讀【可讀,可寫】
- x+ ,寫讀【可讀,可寫】
- a+, 寫讀【可讀,可寫】
"b"表示以字節的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
註:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼
4,上下文管理
with open(‘wxp.txt‘,‘a‘,encoding=‘utf-8‘) as f : #這樣打開就不用關閉了,自動會關閉。 f.read()
5,文件的修改
import os with open(‘wxp.txt‘,‘r‘,encoding=‘utf-8‘) as f_read, open(‘wxp_swap‘,‘w‘,encoding=‘utf-8‘) as f_write: for line in f_read: data=line.replace(‘我‘,‘他‘) f_write.write(data) os.remove(‘wxp.txt‘) os.rename(‘wxp_swap‘,‘wxp.txt‘)
字符編碼及文件操作