上海day7--字符編碼和文件的基本操做類型

目  錄

1、前提知識

2、字符編碼 *****

3、文件的基本操做類型

 

 

1、前提知識

一、運行程序的三個核心硬件:python

  cpu 、內存 、硬盤windows

  任何一個應用程序想要運算,必須先從硬盤加載到內存,而後CPU從內存取指執行。編輯器

二、Python解釋器運行一個py文件(xxx.py)的三個步驟:ide

  先將Python解釋器代碼從硬盤讀到內存;編碼

  將xxx.py以普通文本文件的形式讀到內存;spa

  Python解釋器讀取文件,識別Python語法,執行操做。操作系統

2、字符編碼

一、字符編碼針對的只是文字,像圖片、音頻、視頻等都有指定的格式,因此不須要字符編碼。字符編碼只與文本文件有關。code

二、文本編輯器的輸入輸出是兩個過程:orm

  人在操做計算機時輸入的是人可以看懂的字符,計算機只能看懂01二進制數字,因此須要一個轉變的過程視頻

  輸入的字符             >>>( 字符編碼表)>>>    二進制數字

三、字符編碼表就是字符與數字的對應關係。

字符編碼表的發展歷史:

  ASCII碼錶:用8位二進制數字表示一個英文字符。

    0000 0000  ~ 1111 1111

  GBK:中國發明的,統一用2個Bytes表示一箇中文字符,1個Bytes表示一個英文字符。

    0000 0000 0000 0000

    對應於中國人發明的gbk編碼格式,各國都有各自的編碼格式,如日本的shift 韓國的 fuck

  Unicode 萬國碼:統一用2Bytes表示全部的字符。

    缺點:一、浪費存儲空間   (英文字符爲例,本來1個字節就能夠表示,如今用兩個字節表示,存儲空間加倍)

       二、IO次數增減,程序運行效率下降(致命!)-- 由於文件變大,加載過程會變慢,因此程序運行效率會變低。

當內存中的unicode編碼格式數據存到硬盤的時候,會按照utf-8編碼
unicode transformation format

會將unicode的英文字符由原來的2Bytes變成1Bytes
會將unicode中文字符由原來的2Bytes變成3Bytes

注意:如今的計算機內存都是unicode,硬盤都是utf-8。

須要掌握的

unicode的兩個特色
    1.用戶在輸入的時候,不管輸什麼字符都可以兼容萬國字符
    2.其餘國家編碼的數據由硬盤讀到內存的時候unicode與其餘各個國家的編碼都有對應關係 

必需要掌握的

數據由內存保存到硬盤
    1.內存中的unicode格式二進制數字    >>>>編碼(encode)>>>>>              utf-8格式的二進制數據
    
    硬盤中的數據由硬盤讀到內存
    1.硬盤中的utf-8格式的二進制數據    >>>>>解碼(decode)>>>>>             內存中unicode格式的二進制數據
***** 重點:保證不亂碼的規則 ----文本文件用什麼編碼編的就用什麼編碼去解。

******Python2 與Python3 的區別:
python2
    將py文件按照文本文件讀入解釋器中默認使用ASCII碼(由於在開發python2解釋器的unicode尚未盛行)
python3    
    將py文件按照文本文件讀入解釋器中默認使用utf-8 

文件頭:

# coding:utf-8    
    1.由於全部的編碼都支持英文字符,因此文件頭纔可以正常生效
    
基於Python解釋器開發的軟件,只要是中文,前面都須要加一個u
爲了的就是講python2(當你不指定文件頭的時候,默認用ASCII存儲數據,若是指定文件頭那麼就按照文件頭的編碼格式存儲數據)
       
python3中字符串默認就是unicode編碼格式的二進制數

  補充:

1.pycharm終端用的是utf-8格式
2.windows終端採用的是gbk

 字符編碼總結 —— 最終的結論:

x = ''
res1 = x.encode('utf-8')  # 將unicode編碼成能夠存儲和傳輸的utf-8的二進制數據
print(res1)  # b'\xe4\xb8\x8a'
# bytes類型  字節串類型  你就把它當成二進制數據便可
res2 = res1.decode('utf-8')  # 將硬盤中的utf-8格式的二進制數據解碼成unicode格式的二進制數據
print(res2)

3、文件的基本操做

文件的處理:

一、文件的定義:

什麼是文件?
    操做系統提供給用戶操做複雜硬件(硬盤)的簡易的接口

爲何操做文件
    人或者應用程序須要永久的保存數據

二、代碼操做文件的兩種方式

   第一種:

# r取消轉義
f = open(r'D:\Python項目\day07\a.txt',encoding='utf-8')  # 向操做系統發送請求  打開某個文件
# 應用程序要想操做計算機硬件 必須經過操做系統來簡介的操做
print(f)  # f是文件對象
print(f.read())  # windows操做系統默認的編碼是gbk
f.read()  # 向操做系統發請求 讀取文件內容
f.close()  # 告訴操做系統 關閉打開的文件
print(f)
print(f.read())

        第二種:文件上下文操做

with open(r'D:\Python項目\day07\a.txt',encoding='utf-8') as f ,\
        open(r'D:\Python項目\day07\b.txt',encoding='utf-8') as f1:  # f僅僅是一個變量名 你把它當作是一個遙控器
    print(f)
    print(f.read())
    print(f1)
    print(f1.read())

文件的處理模式

文件打開的模式:

  r 模式    w模式       a 模式

操做文件單位的方式:

  t 文本文件 : t 在使用的時候要指定encoding 參數,若是不指定就是操做系統自帶的默認編碼方式

  b 二進制 :  必定不能指定encoding 參數

# mode參數 能夠不寫  不寫的話默認是rt 只讀的文本文件  這個t不寫默認就是t
with open(r'D:\Python項目\day07\a.txt',mode='r',encoding='utf-8') as f:
    print(f.readable())  # 是否可讀
    print(f.writable())  # 是否可寫
    print(f.read())  # 一次性將文件內容所有讀出

 r 模式:

  r模式在打開文件時,若是文件不存在會直接報錯;能夠寫相對路徑也能夠寫絕對路徑,但相對路徑要在同一層文件下。

with open(r'a.txt',mode='r',encoding='utf-8') as f:
with open(r'a.txt','r',encoding='utf-8') as f1:  mode關鍵字能夠不寫
    print(f.readable())  # 是否可讀
    print(f.writable())  # 是否可寫
    print(">>>1:")
    print(f.read())  # 一次性將文件內容所有讀出
    print('>>>2:')
    print(f.read())  # 讀完一次以後 文件的光標已經在文件末尾了,再讀就沒有內容了可讀
    print(f.readlines())  # 返回的是一個列表  列表中的一個個元素對應的就是文件的一行行內容
    for line in f:  # f能夠被for循環 每for循環依次 讀一行內容
        print(i)  # 這個方法 就能夠解決大文件一次性讀取佔用內存太高的問題
    print(f.readline())  # 只讀取文件一行內容
    print(f.readline())
    print(f.readline())
    print(f.readline())
View Code

w模式:

  w模式必定要慎用:

    當文件不存在的時候會新建文件;

    當文件存在的時候會先清空在寫入內容。

a模式:

  a模式是追加寫模式:

    當文件不存在的時候,會新建文件;

    當文件存在的時候,不會清空文件,鼠標的光標會在移動到文件的最後,再添加寫入內容。

相關文章
相關標籤/搜索