開發技術--淺談文件操做與字符編碼

開發|淺談文件操做與字符編碼

據說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

GB2312與GBK

在基礎知識,已經知道了ASCII表是作什麼的,那麼如今能夠表示ASCII表中的字符到計算機中了,此時其餘除了ASCII表中的字符去哪裏找,有怎麼存儲到計算機中?
中國,最早使用的是 GB2312,隨着須要表示字符數量的增多,開始使用GBK。此時就能夠將漢字轉換爲計算機能夠看懂的二進制數。
注意: GBK是在ASCII表中的進行的字符映射擴展。此時表示一個漢字須要2個字節

unicode

unicode編碼,是將全球的語言字符進行了整合,全部的語言字符均可以在unicode中找到。
注意:unicode編碼的全部字符所有須要4個字節。

utf家族

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以後自動關閉,有必定的時延)
字符編碼,真心很差理解,其實最簡單的方式就是,分開看內存,硬盤,操做系統,軟件,以及對應的編碼是什麼,就會很清楚了,祝你們學習愉快~~
一點感悟:時間很快,就是轉眼間的事,儘可能將本身的時間進行量化~~~

相關文章
相關標籤/搜索