一、運行程序的三個核心硬件:python
cpu 、內存 、硬盤windows
任何一個應用程序想要運算,必須先從硬盤加載到內存,而後CPU從內存取指執行。編輯器
二、Python解釋器運行一個py文件(xxx.py)的三個步驟:ide
先將Python解釋器代碼從硬盤讀到內存;編碼
將xxx.py以普通文本文件的形式讀到內存;spa
Python解釋器讀取文件,識別Python語法,執行操做。操作系統
一、字符編碼針對的只是文字,像圖片、音頻、視頻等都有指定的格式,因此不須要字符編碼。字符編碼只與文本文件有關。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)
什麼是文件?
操做系統提供給用戶操做複雜硬件(硬盤)的簡易的接口
爲何操做文件
人或者應用程序須要永久的保存數據
第一種:
# 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()) # 一次性將文件內容所有讀出
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())
w模式必定要慎用:
當文件不存在的時候會新建文件;
當文件存在的時候會先清空在寫入內容。
a模式是追加寫模式:
當文件不存在的時候,會新建文件;
當文件存在的時候,不會清空文件,鼠標的光標會在移動到文件的最後,再添加寫入內容。