1. 程式人生 > >字符編碼及文件操作

字符編碼及文件操作

讀文件 logs pytho 清空 讀取 什麽是 解釋器 () 文件的

一,字符編碼

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,文件操作流程

  1. 打開文件,得到文件句柄並賦值給一個變量
  2. 通過句柄對文件進行操作
  3. 關閉文件

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)

字符編碼及文件操作