1.1.字符編碼
1.1.1.字符編碼的作用
計算機只認識0和1組成的二進制序列檩互,因此任何文件中的內(nèi)容(比如“hello neuedu”咸灿,“你好木张,世界”這些字符串)要想被計算機識別或者想存儲在計算機上都需要轉(zhuǎn)換為二進制序列。那么字符與二進制序列怎么進行相互轉(zhuǎn)換呢?于是人們嘗試建立一個表格來存儲一個字符與一個二進制序列的對應(yīng)關(guān)系岳瞭。
- 編碼將字符轉(zhuǎn)換為對應(yīng)的二進制序列的過程叫做字符編碼
- 解碼將二進制序列轉(zhuǎn)換為對應(yīng)的字符的過程叫做解碼
1.2.字符編碼的簡單發(fā)展歷史
1.2.1.ASCII碼誕生
最早建立這個字符與十進制數(shù)字對應(yīng)的關(guān)系的是美國,這張表被稱為ASCII碼(American Standard Code for Information Interface, 美國標準信息交換代碼)蚊锹。ASCII碼是基于拉丁字母的一套電腦編程系統(tǒng)瞳筏,主要是用于顯示現(xiàn)代英語和其他西歐語言。它被設(shè)計為用1個字節(jié)來表示一個字符牡昆,所以ASCII碼表最多只能表示2**8=256個字符姚炕。實際上ASCII碼表中只有128個字符,剩余的128個字符是預(yù)留擴展用的丢烘。
1.2.2.GBK等各國編碼誕生
隨著計算機的普及和發(fā)展柱宦,很過國家都開始使用計算機。大家發(fā)現(xiàn)ASCII碼預(yù)留的128個位置根本無法存儲自己國家的文字和字符播瞳,因此各個國家開始制定各自的字符編碼表掸刊,其中中國的的字符編碼表有GB2312和GBK。
1.2.3.Unicode誕生(萬國碼)
后來隨著世界互聯(lián)網(wǎng)的形成和發(fā)展赢乓,各國的人們開始有了互相交流的需要忧侧。但是這個時候就存在一個問題,每個國家所使用的字符編碼表都是不同的牌芋。這個時候蚓炬,人們希望有一個世界統(tǒng)一的字符編碼表來存放所有國家所使用的文字和符號,這就是Unicode躺屁。Unicode又被稱為 統(tǒng)一碼肯夏、萬國碼、單一碼犀暑,它是為了解決傳統(tǒng)的字符編碼方案的局限性而產(chǎn)生的驯击,它為每種語言中的每個字符設(shè)定了統(tǒng)一并且為之一的二進制編碼。Unicode規(guī)定所有的字符和符號最少由2個字節(jié)(16位)來表示母怜,所以Unicode碼可以表示的最少字符個數(shù)為2**16=65536余耽。
1.2.4.UTF-8誕生
為什么已經(jīng)有了Unicode還要UTF-8呢?因為美國人不樂意了苹熏,由于當(dāng)時存儲設(shè)備是非常昂貴的碟贾,而Unicode中規(guī)定所有字符最少要由2個字節(jié)表示币喧。美國人認為像原來ASCII碼中的字符用1個字節(jié)就可以了,因此決定創(chuàng)建一個新的字符編碼來節(jié)省存儲空間袱耽。UTF-8是對Unicode編碼的壓縮和優(yōu)化杀餐,它不在要求最少使用2個字節(jié),而是將所有字符和符號進行分類:
- ascii碼中的內(nèi)容用1個字節(jié)保存
- 歐洲的字符用2個字節(jié)保存
- 東亞的字符用3個字節(jié)保存
- ...
UTF-8是目前最常用朱巨,也是被推薦使用的字符編碼史翘。
1.3.字符串和字節(jié)序列的轉(zhuǎn)換
1.3.1.字符串轉(zhuǎn)字節(jié)序列
bytes = '張三'.encode()
print(bytes)
print(type(bytes))
bytes = '張三'.encode('utf-8')
print(bytes)
print(type(bytes))
bytes = '張三'.encode('gbk')
print(bytes)
print(type(bytes))
輸出
b'\xe5\xbc\xa0\xe4\xb8\x89'
<class 'bytes'>
b'\xe5\xbc\xa0\xe4\xb8\x89'
<class 'bytes'>
b'\xd5\xc5\xc8\xfd'
<class 'bytes'>
encode默認按utf-8編碼
1.3.2.字節(jié)序列轉(zhuǎn)字符串
bytes = b'\xe5\xbc\xa0\xe4\xb8\x89'
msg1 = bytes.decode()
print(msg1)
print(type(msg1))
msg1 = bytes.decode('utf-8')
print(msg1)
print(type(msg1))
msg1 = bytes.decode('gbk')
print(msg1)
print(type(msg1))
輸出
張三
<class 'str'>
張三
<class 'str'>
寮犱笁
<class 'str'>
1.4.文件的概念和作用
- 計算機的文件,就是存儲在硬盤上的數(shù)據(jù)
1.5.文件的存儲方式
- 在計算機中冀续,文件是以二進制的方式保存在磁盤上的
1.5.1.文本文件和二進制文件
- 文本文件(字符串)
可以使用文本編輯軟件查看
本質(zhì)上還是二進制文件
例如:python的源程序 - 二進制文件
保存的內(nèi)容不是給人直接閱讀的琼讽,而是提供給其他軟件使用的
例如:圖片文件、音頻文件洪唐、視頻文件等等
二進制文件不能使用文本編輯軟件查看
1.6.文件的基本操作
1.6.1.操作文件的套路
在計算機中要操作文件的套路非常固定钻蹬,一共包含三個步驟:
1.打開文件
2.讀、寫文件
讀 將文件內(nèi)容讀入內(nèi)存
寫 將內(nèi)存內(nèi)容寫入文件
3.關(guān)閉文件
1.6.2.操作文件的函數(shù)/方法
- 在python中要操作文件需要記住1個函數(shù)和3個方法
open 打開文件凭需,并且返回文件操作對象
read 將文件內(nèi)容讀取到內(nèi)存
write 將指定內(nèi)容寫入文件
close 關(guān)閉文件
open函數(shù)負責(zé)打開文件问欠,并且返回文件對象
read/write/close三個方法都需要通過文件對象來調(diào)用
1.6.3.read方法--讀取文件
- open函數(shù)的第一個參數(shù)是要打開的文件名(文件名區(qū)分大小寫)
如果文件存在,返回文件操作對象
如果文件不存在粒蜈,會拋出異常 - read方法可以一次性讀入并返回文件的所有內(nèi)容
- close方法負責(zé)關(guān)閉文件
如果忘記關(guān)閉文件顺献,會造成系統(tǒng)資源消耗,而且會影響到后續(xù)對文件的訪問