1. 程式人生 > >Python基礎day-5[字符編碼,文件處理,函數]

Python基礎day-5[字符編碼,文件處理,函數]

一個 狀態 asc 國際 文件處理 調用 文字 read font

字符編碼:

  為什麽要有字符編碼?字符編碼是為了讓計算機能識別我們人寫的字符,因為計算機只認識高低電平,也就是二進制數"0","1".

  字符編碼其實就是在完成一件,字符====>數字的翻譯過程.

  ASCII:

  最早計算機是美國發明的,所以最早誕生的ASCII碼也是基於英文考慮的.ASCII碼:一個Bytes代表一個字符,1Bytes=bit.最早的ASCII只用到後七位.

127個數字,已經完全能代表鍵盤了,後來又把127號之後的空位來表示新的字母、符號,還加入了很多畫表格時需要用下到的橫線、豎線、交叉等形狀,一直把序號編到了最後一個狀態255。從128 到255這一頁的字符集被稱”擴展字符集“。

  GBK標準:

  等到中國使用計算機的時候,已經沒有可利用的字節狀態來表示漢字了,所以中國人發明了GBK標準,一個字符等於兩個Bytes.GBK包括了GB2312 的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號。 後來少數民族也要用電腦了,於是我們再擴展,又加了幾千個新的少數民族的字,GBK擴成了 GB18030。這一系列漢字編碼的標準叫做 “DBCS“(Double Byte Charecter Set 雙字節字符集).

  UNICODE:

  由於各國都有自己的一套像中國一樣的編碼標準,互相之間又看不懂對方的編碼.所以ISO(國際標準化組織)制定了一種新的編碼”Universal Multiple-Octet Coded Character Set”,簡稱 UCS, 俗稱 “unicode“.unicode規定必須用兩個字節,也就是16位來統一表示所有的字符,對於ASCII裏的那些“半角”字符,unicode包持其原編碼不變,只是將其長度由原 來的8位擴展為16位,而其他文化和語言的字符則全部重新統一編碼。由於”半角”英文符號只需要用到低8位,所以其高8位永遠是0,因此這種方案在保存英文文本時會多浪費一倍的空間.

  UTF-8

  UTF-8,對英文字符只用1Bytes表示,對中文字符用3Bytes.

補充:

  計算機內存中使用的編碼是unicode,用空間來換取時間,而硬盤或者網絡傳輸則使用的是utf-8,來達到節省空間的目的.

  計算機在存取數據的時候,以什麽格式存的就需要以什麽格式來解碼.例如:數據在內存中使用unicode編碼來保存,當數據要刷入硬盤時,就需要把數據用utf-8的標準轉換成Bytes(二進制),保存在硬盤上,讀取的時候就需要用utf-8的標準轉換成unicode,如果保存和讀取使用的編碼不同會導致亂碼.

  python中的字符編碼:

  當我們在寫一個Python文件的時候,這時候寫的東西其實就是字符串,跟Python的命令沒有任何關系,Python是一種解釋語言,當我們用Python解釋器去運行我們寫的代碼時,解釋器會按照代碼頭聲明的字符編碼,先去硬盤讀取數據,使用聲明的字符編碼解碼轉換成unicode編碼,然後在解釋執行.

  python3三中,默認使用的編碼是unicode編碼,Python2中則需要手動指定,否則代碼無法正常運行.Python2中的 str默認存的是Bytes.而不是像Python3一樣默認存的是unicode.

  Python使用 encode和decode 兩個參數命令來編碼和解碼.

文件處理:

  打開文件:
  f = open(‘a.txt‘,‘w‘,encoding=‘utf-8‘)

  #encoding 定義文件的讀取方式 w表示覆蓋寫入打開,a是追加寫入文件內容, r是只讀模式
  #rb,wb,ab 以Bytes讀取文件,二進制模式 不需要指定encoding
  

  f.write(‘安居客活動卡收到類似的看了\n3213213213213213\n‘)

  #寫入字符串 無自動換行 需加\n #同read Bytes模式

  f = open(‘a.txt‘,encoding=‘utf-8‘)
  print(f.read()) #讀取文件所有內容,並打印出來 ()內寫數字,根據字符來確定光標位置
  #當以Bytes方式讀取文件時,需要指定 encoding來正常顯示

  #關閉打開的文件
  f.close()

  #立即刷入寫入內容
  f.flush()

  #判斷文件是否關閉
  f.closed

  #查看文件名和字符編碼
  f.name,f.encoding

  #移動光標
  f.seek(0) #以文件起始作為參考,()內是字節來移動 (3,0/1/2) 0/1/2 分別代表 文件起始/當前位置/文件末尾

  #告知當前光標位置
  f.tell()

  #截斷(寫操作) ()也是字節來判斷
  f.truncate()

函數:

  一 為何要有函數?
    不加區分地將所有功能的代碼壘到一起,問題是:
    代碼可讀性差
    代碼冗余
    代碼可擴展差

  如何解決?
    函數即工具,事先準備工具的過程是定義函數,拿來就用指的就是函數調用

  結論:函數使用必須是:先定義,後調用

  二:函數的分類
  1.內置函數:built-in
  2.自定義函數:
    def 函數名(參數1,參數2,...):
    ‘‘‘註釋‘‘‘
    函數體

  示例:

    def a(t,c,h): #傳入三個參數,定義t:打印什麽,c打印多少次,h打印幾行
    for i in range(h): #for循環,循環為h的次數
    print(t*c)  #打印內容t 和次數

  定義函數分類  

    定義無參函數: 不依賴外部參數運行
    def print()
    print(‘111111‘)
    定義有參函數: 依賴外部參數運行
    def a(t,c,h):
    for i in range(h):
    print(t*c)
    定義空函數: 函數體為pass
    def <函數名>(x,y,z)
    pass

Python基礎day-5[字符編碼,文件處理,函數]