1. 程式人生 > >python學習第七天

python學習第七天

展示 新建 中一 功能 數字 應用 nco 流程 編碼解碼

字符編碼

# 重點:什麽是字符編碼
  人類能識別的是字符等高級標識符,電腦只能識別0,1組成的標識符,要完成人與機器之間的信息交流,一定需要一個媒介,進行兩種標識符的轉化(兩種標識符的對應關系)
'''
CPU:將數據渲染給用戶,中央處理器
內存:臨時存放數據,斷電後消失
硬盤:永久存儲數據,斷電後還有

亂碼:存數據與讀數據采用的編碼表不一致

軟件打開文件讀取數據的流程:
1. 打開軟件
2. 往計算機發生一個打開文件的指令,來打開文件
3. 讀取數據渲染給用戶(存取編碼不一致:亂碼)


python解釋器打開py文件
1. 打開軟件(python解釋器)
2. 往計算機發生一個打開文件的指令,來打開文件
3. 逐行解釋打開的文件內容(存取編碼不一致,無法正常解釋,崩潰),將執行結果展示給用戶

解釋失敗的原因:
py2默認按ASCII來解釋文件內容 | py3默認按UTF-8來解釋文件內容

文件頭:# encoding: 編碼表
功能:告訴py解釋器按照什麽編碼來解釋文件內容
'''

了解

'''
編碼表:
人內識別的字符標識符 與 計算機能識別的01標識符 的對應關系

萬國編碼:Unicode utf-8
1. 采用的都是Unicode編碼表
2. Unicode以定長(2字節)存取數據
3. utf-8以變長(1-6字節)存取數據
編碼表的發展史
1. ascii(ASCII):字母、數字、英文符號與計算機01標識符的對應關系
思考:如何將128個字符用01完全標簽
二進制:11111111 => 255 => 1bytes(1字節) => 8個二進制位

2.中國:研究漢字與計算機01標識符的對應關系:gb2312 => GBK(***) => GB18030
日本:Shift_JIS
棒子:Euc-kr

3. 制造一個可以完成萬國字符與計算機01標識符的對應關系的編碼表
編碼表:unicode表
py2:ascii,沒有按萬國編碼,原因py2要誕生先有萬國編碼
py3: utf-8, 采用萬國編碼來解釋文本內容

'''

重點

'''
unicode與utf-8什麽關系
unicode:用2個字節來存儲漢字,用2個字節來存儲英文字母,占有空間較多,讀取效率極高
utf-8:用3-6個字節來存儲漢字,用1個字節來存儲英文字母,占有空間較少,讀取效率低
總結:內存都是按unicode存儲數據,硬盤和cpu采用utf-8來存取數據

unicode與utf-8采用的是一張unicode編碼表,utf-8是unicode編碼表體現方式,變長存儲數據
變長優點:(大量數據都是以英文存在,所以utf-8空間更小)傳輸速度更快
'''

編碼解碼

# 三種字符串
# unicode字符串,默認字符串
s1 = u'abc你好\n不好'
print(s1)
# 字節字符串
s2 = b'abc123\xb7\xb7'
print(s2)
# 原義字符串: 不對字符串內存做任何操作(eg:\n的轉化)
s3 = r'abc你好\n不好'
print(s3)

# 原義字符串: 不對字符串內存做任何操作(eg:\n的轉化)
# r'abc\nabc'  => 'abc\nabc'

# 重點(*****)
# u'' 之間轉化 b''
# 編碼:u''.encode('utf-8') | bytes(u'', encode='utf-8')
# 解碼:b''.decode('utf-8') | str(b'', encode='utf-8')

文件操作

'''
計算機中的文件:硬盤中一塊存儲空間(虛擬的文件)
文件操作:根據文件名來操作硬盤的那塊存儲空間,操作方式 讀read 寫write
'''
'''
1. 打開文件
# 變量名 = 文件空間
# 文件路徑 操作模式(讀|寫) 編碼
f = open('a.txt', 'r', encoding='utf-8')

2. 操作文件(讀:read()  寫:write())
# data = f.read(3)  # 將所有內容讀取出來,如果設置讀取長度,按照規定長度讀取數據
# print(data)

3. 關閉文件 *****
'''
# 基礎讀

# 1、打開文件
# 變量名 = 文件空間
# 文件路徑 操作模式(讀|寫) 編碼
f = open('a.txt', 'r', encoding='utf-8')

# 2、操作文件
# data = f.read(3)  # 將所有內容讀取出來,如果設置讀取長度,按照規定長度讀取數據
# print(data)

# 一次讀取一行
# line = f.readline()
# print(line)
# line = f.readline()
# print(line)

# 按行一次性全部讀出
# lines = f.readlines()
# print(lines)

# 逐步一行一行讀取
# l = []
# for line in f:
#     # print(line)
#     l.append(line)
# print(l)

s = set()
for line in f:
    # print(line)
    s.add(line)
print(s)

# 3、關閉文件
f.close()  # 釋放操作系統對文件的持有,變量f還被應用程序持有
# 模式
'''
主模式:r:讀 | w:寫 | a:追加
從模式:b:按字節操作 | t:按字符操作 | +:可讀可寫
了解:x:異常寫 | U:被遺棄了
'''
# 基礎寫 write
# 文件不存在:會新建文件,再操作文件
# 文件存在:先清空文件,再操作文件
w = open('b.txt', 'w', encoding='utf-8')
w.write('456')
w.close()

python學習第七天