字符編碼及文本一

字符編碼與文件處理

1、前置知識點:

​ 一、程序執行的三大核心硬件(***):
​ cpu
​ 內存
​ 硬盤
​ 正常執行一個程序的要點:
​ 一、將硬盤中的數據讀到內存
​ 二、由cpu讀內存中的數據進行執行
​ 三、在執行程序的時候,生成的數據,優先存入內存python

二、python解釋器執行一個py文件過程(***)
    若是沒有python解釋器,py文件單純就是一個文本文件
    因此說,想執行py文件,必須先執行python解釋器

    一、將python解釋器的代碼有硬盤讀到內存
    二、將py文件以普通文本文件的格式由硬盤讀到內存
    三、python解釋器去內存中讀取py文件的數據
    四、識別python語法,執行相應的操做

    ps:任何一個文本編輯器的執行,前兩部都同樣

2、字符編碼:

​ 字符:世界上一切語言、文字
​ 有必要考慮,圖片文件、音頻文件、視頻文件?windows

文件的輸入和輸出是兩個過程

人類輸入的內容都是人類本身能夠識別的字符

計算機只能識別0101010二進制字符

將人類的字符,存入內存和硬盤,要經歷一個過程:

人類的字符  >>>>>>>     (字符編碼表)    >>>> 計算機二進制

0 a
1 b
01 a
10 b
00 c
11 d

ASCII碼錶(美國)
    用八位二進制來表明一個英文字符(全部的英文字符+符號一共大概128左右)
        0000 0000
        1111 1111
        最多隻能表示255位


    八位二進制 = 8 bit
    8 bit = 1 bytes
    1024bytes = 1KB
    1024KB = 1MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB

GBK(中國)
    用2個bytes來表明一個字符,兼容英文字符
    0000 0000 0000 0000
    1111 1111 1111 1111
    最多能夠表示65535位

shit(小日子過得不錯的日本人)

fuck(韓國的)

萬國碼(unicode)

爲了兼容全部的國家的字符,生成unicode
    全部的字符都用2bytes
    0101 0101 a
    0000 0000 0101 0101 a
    一、佔用存儲空間
    二、io次數增長,程序運行速度變慢(最致命)

在unicode二進制數據存入硬盤的時候,作優化

utf-8:
    utf-8只與unicode有對應關係
    unicode transformation format

    全部的英文字符用1個bytes表示
    全部的中文字符用3個bytes表示

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

3、結論

須要掌握:
    一、用戶不管輸入什麼字符,存入內存,unicode均可以兼容
    二、硬盤中不管是什麼編碼的文件,讀到內存,均可以兼容unicode

數據的傳輸:
    優先以本身的本國字符編碼進行傳遞


必須掌握(******)#五星級
    (內存)unicode二進制字符 >>>  編碼(encode)  >>> (硬盤)utf-8二進制字符
    (硬盤)utf-8二進制字符  >>>   解碼(decode)  >>> (內存)unicode二進制字符

(******)
保證不亂碼核心:
    用什麼編碼存的數據,就用什麼編碼取

python2 :
    默認的字符編碼ascii碼(由於當時的unicode還沒盛行)
python3:
    默認的字符編碼utf-8

文件頭:
    # coding:utf-8
    用英文字符,是爲了讓全部的計算機均可以識別


pycharm默認的字符編碼是:
    utf-8
windows操做系統默認字符編碼:
    gbk

4、深淺拷貝

import copy
l1 = [257, 'a', [4, 5, 6]]
print(l1)
print(id(l1))
# print(id(l1[0]))
l2 = copy.deepcopy(l1)  # [1, 'a', [4, 5, 6]]
l2[2][0] = 4444
print(l2)
print(id(l2))
print("l1:", l1)
print("id_l1:", id(l1))

這裏只須要了解便可,結論就是:
淺copy只是把大框架拿了過來,,而裏面的值仍是與原來同樣,即ID也同樣,若改變大框架裏面的小列表中的值,copy後小列表中的ID以及原小列表的ID都會改變。
深copy就是不止把大框架拿了過來,而把小框架裏的東西都拿了過來,改變小列表中的值,這個小列表的ID會變,而原小列表ID不變。

5、文件處理

一、什麼是文件?框架

操做系統給你提供操做硬盤的一個工具編輯器

二、爲何要用文件?工具

爲了知足人類和計算機永久保存數據優化

三、怎麼用文件?編碼

相對路徑:必須與當前文件在同一目錄操作系統

絕對路徑:固定的只能在這臺電腦操做code

四、經常使用的字符意願orm

'r'             以只讀方式打開文件(默認)
'w'             以寫入的方式打開文件,注意會已存在的文件,即將已有的文件刪除
'x'             若是文件已存在,用此方式打開會發生異常
'a'             以寫入的方式打開,若是文件存在,會在末尾追加寫入
'b'             以二進制打開,主要用於圖片,視頻
't'             以文本的方式打開
'+'             能夠將r+w變成可讀寫模式
'u'             通用換行符

五、文件處理

f = open("a.txt")

print(f.readable())  # 判斷當前文件是否可讀
print(f.writable())  # 判斷當前文件是否可寫

# del f  # 回收變量資源
f.close()  # 回收操做系統的資源


with open('a.txt',mode='r')as rf,\
        open('a.txt',mode='w')as wf:  # with會自動幫你回收操做系統的資源,無需本身操做
    print(rf.readable())
    print(wf.writable())

# r進行轉義
with open(r'D:\項目路徑\python13期\day07\a.txt')as f:
    print(f.read())   # 讀取文件

六、文件處理模式

with open(r'th.jpg', mode='rb')as rf,\
        open('xiawuchameilv.png', mode='wb')as wf:
    xiawuchameilv = rf.read()
    wf.write(xiawuchameilv)
"""
打開文件的三種模式:
    r :
        一、只讀
        二、若是文件不存在,會報錯
    w:(慎用)
        一、只寫
        二、若是文件不存在,則新建一個文件寫入數據
        三、若是文件內存在數據,會將數據清空,從新寫入
    a:
        一、追加寫
        二、若是文件內存在數據,會在已有數據的後面追加數據
        三、若是文件不存在,則新建一個文件寫入數據
處理文件的模式:
    t
    b
"""

七、文件打開模式

with open(r'a.txt', 'r', encoding='utf-8')as f:
    print(f.readable())
    print(f.read())
    print(f.readline())  # 執行一次,打印一行內容
    print(f.readlines())
    print(f.read())
    print(f.readable())
    print(f.read())
>>>True
亞峯666

[]

True

with open(r'b.txt', 'w', encoding='utf-8')as f:
    f.writelines(["乾巴爹\n",'加油'])
>>>乾巴爹
   加油

with open(r'aaaaa.txt','a',encoding='utf-8')as f:
    print(f.writable())
    f.write("\n努力,奮鬥")
>>>努力,奮鬥

相關文章
相關標籤/搜索