python_文件操作與字符編碼

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ù)對文件的訪問
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枯怖,一起剝皮案震驚了整個濱河市注整,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫁怀,老刑警劉巖设捐,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異塘淑,居然都是意外死亡萝招,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門存捺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來槐沼,“玉大人,你說我怎么就攤上這事捌治「诠常” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵肖油,是天一觀的道長兼吓。 經(jīng)常有香客問我,道長森枪,這世上最難降的妖魔是什么视搏? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任审孽,我火速辦了婚禮,結(jié)果婚禮上浑娜,老公的妹妹穿的比我還像新娘佑力。我一直安慰自己,他們只是感情好筋遭,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布打颤。 她就那樣靜靜地躺著,像睡著了一般漓滔。 火紅的嫁衣襯著肌膚如雪编饺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天次和,我揣著相機與錄音反肋,去河邊找鬼。 笑死踏施,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罕邀。 我是一名探鬼主播畅形,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诉探!你這毒婦竟也來了日熬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肾胯,失蹤者是張志新(化名)和其女友劉穎竖席,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敬肚,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡毕荐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了艳馒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憎亚。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弄慰,靈堂內(nèi)的尸體忽然破棺而出第美,到底是詐尸還是另有隱情,我是刑警寧澤陆爽,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布什往,位于F島的核電站,受9級特大地震影響慌闭,放射性物質(zhì)發(fā)生泄漏别威。R本人自食惡果不足惜躯舔,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兔港。 院中可真熱鬧庸毫,春花似錦、人聲如沸衫樊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽科侈。三九已至载佳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間臀栈,已是汗流浹背蔫慧。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留权薯,地道東北人姑躲。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像盟蚣,于是被迫代替她去往敵國和親黍析。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容