據說Python的文件操做很容易在某一些電腦上出問題,然而罪魁禍首就是字符編碼。讓咱們來了解一些底層的編碼方式。html
目前全部的文章思想格式都是:知識+情感。 知識:對於全部的知識點的描述。力求不含任何的自我感情色彩。 情感:用我本身的方式,解讀知識點。力求通俗易懂,完美透析知識。
本文主要分爲兩大部分,一部分是如何使用Python進行文件操做,另外一部分是聊一下字符編碼的那些事。(比較繞,儘可能用最最最通俗的話表述~~)python
1.文件操做方式
open()
close()
直接看源碼吧~~網絡
def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True): """ Open file and return a stream. Raise OSError upon failure. ========= =============================================================== Character Meaning --------- --------------------------------------------------------------- 'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and open it for writing 'a' open for writing, appending to the end of the file if it exists 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing) 'U' universal newline mode (deprecated) ========= =============================================================== """ pass
2.文件操做modeapp
'r' 只讀 'w' 清空文件內容,只寫 'a' 打開文件,追加內容 'b' 二進制操做文件,因此就有rb/wb/ab '+' 增長讀寫的功能,plus的功能~,因此就有w+/r+
3.讀文件
1)最經常使用的是使用with 語句打開文件,不須要考慮關閉文件,自動進行文件的關閉
2)使用文件句柄f進行打開文件,必須本身指定關閉文件
3)文件讀取的時候,可使用 read() 讀取全部的文件,也可使用readline() 讀取文件的一行
4)注意原始文件的編碼,不指定pycharm默認的是utf-8,編碼錯誤就亂碼函數
4.寫文件
1)寫數據到文件,使用 write()函數,可是不是直接寫到硬盤中,是先寫到內存中,過必定時間以後寫到硬盤中。
2)可使用 flush() (強刷內存中數據到硬盤)學習
5.文件的經常使用操做
關鍵點:文件中光標的位置編碼
seek() # (注意:文件的編碼,整數倍的文件編碼單元的字節) truncate() # 截斷數據 tell() # 返回光標的位置 修改文件局部內容 佔內存修改 佔硬盤修改
6.附加了解內容
1)給文件重命名
可使用 : os.rename() 或者 os.replace()
注意:在使用with打開文件重命名的時候,會報錯,緣由是當前文件尚未被關閉,是沒有辦法重命名的,能夠更換打開方式,使用文件句柄打開。操作系統
2)sys.argv
sys.argv[]是從程序外部獲取參數
sys.argv[0]表示代碼自己文件路徑
不理解的能夠參考一下 這篇文章;http://www.javashuo.com/article/p-cthlxfyn-n.htmlcode
1.二進制是什麼?
二進制是0與1,計算機只認識二進制。可是人並不認識計算機認識的二進制(命令轉化的二進制)。人只認知命令。那麼命令如何變爲二進制就是須要解決的問題。htm
2.ASCII表能夠幹什麼?
ASCII表表示的256個字符的順序表。既然有順序,那麼人能夠讀的是十進制,而十進制能夠變爲二進制,因此ASCII表也就是起到了特殊字符映射到二進制的做用。
Python查看輸入字符對應的二進制的十進制數是多少的函數: ord('a')
注意:此時咱們就能夠輸入ASCII表中的字符,就會轉爲二進制,計算機就看懂了。見下圖ASCII表:
3.數據的表示
在計算機中,規定一個二進制數爲一個bit(位)。
八個二進制數爲八個bit,稱爲1個bytes,表示1個字節。
進而:1KB=1024B
在基礎知識,已經知道了ASCII表是作什麼的,那麼如今能夠表示ASCII表中的字符到計算機中了,此時其餘除了ASCII表中的字符去哪裏找,有怎麼存儲到計算機中?
中國,最早使用的是 GB2312,隨着須要表示字符數量的增多,開始使用GBK。此時就能夠將漢字轉換爲計算機能夠看懂的二進制數。
注意: GBK是在ASCII表中的進行的字符映射擴展。此時表示一個漢字須要2個字節。
unicode編碼,是將全球的語言字符進行了整合,全部的語言字符均可以在unicode中找到。
注意:unicode編碼的全部字符所有須要4個字節。
utf家族的表明明星是: utf-8。
因爲使用unicode編碼,文件的存儲變大,而且不利於網絡數據的傳輸和存儲,因此改進的方式是utf家族,其中使用對多的就是utf-8.
UTF-8: 使用一、二、三、4個字節表示全部字符;優先使用1個字符、沒法知足則使增長一個字節,最多4個字節。英文佔1個字節、歐洲語系佔2個、東亞(中國)佔3個,其它及特殊字符佔4個
1.前提知識:
1)計算機的內存中數據,也就是內存中的二進制0和1,是使用 unicode 編碼。
2)全部的網絡傳輸與數據存儲(硬盤上的數據),是使用utf-8 編碼。
3)Windows系統的編碼是 gbk。
2.不一樣編碼轉換方法
使用unicode編碼做爲中介,首先將源編碼文件進行解碼(decode()解碼)成爲unicode,再將unicode編碼(encode())成爲目標編碼格式。
3.pycharm中聲明編碼格式
推薦聲明:coding:utf-8 # -- encoding:utf-8 --
注意:第一行寫編碼聲明,此時pycharm會自動將該文件的編碼格式變爲utf-8.本身留意書寫與不寫聲明,pycharm右下角的變化。
小結一下,文件操做中,使用with語句打開的時候,若是對文件繼續操做,不手動關閉,會報錯。(本身踩得大坑,with語句不會在跳出with以後自動關閉,有必定的時延)
字符編碼,真心很差理解,其實最簡單的方式就是,分開看內存,硬盤,操做系統,軟件,以及對應的編碼是什麼,就會很清楚了,祝你們學習愉快~~
一點感悟:時間很快,就是轉眼間的事,儘可能將本身的時間進行量化~~~