日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

開發(fā)技術(shù)--淺談文件操作與字符編碼

 印度阿三17 2019-07-24

開發(fā)|淺談文件操作與字符編碼

聽說Python的文件操作很容易在某一些電腦上出問題,然而罪魁禍?zhǔn)拙褪亲址幋a。讓我們來了解一些底層的編碼方式。

前言

目前所有的文章思想格式都是:知識(shí) 情感。
知識(shí):對(duì)于所有的知識(shí)點(diǎn)的描述。力求不含任何的自我感情色彩。
情感:用我自己的方式,解讀知識(shí)點(diǎn)。力求通俗易懂,完美透析知識(shí)。

正文

本文主要分為兩大部分,一部分是如何使用Python進(jìn)行文件操作,另一部分是聊一下字符編碼的那些事。(比較繞,盡量用最最最通俗的話表述~~)

文件操作

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.文件操作mode

    'r'       只讀
    'w'       清空文件內(nèi)容,只寫
    'a'       打開文件,追加內(nèi)容
    'b'       二進(jìn)制操作文件,所以就有rb/wb/ab
    ' '       增加讀寫的功能,plus的功能~,所以就有w /r 

3.讀文件
1)最常用的是使用with 語句打開文件,不需要考慮關(guān)閉文件,自動(dòng)進(jìn)行文件的關(guān)閉
2)使用文件句柄f進(jìn)行打開文件,必須自己指定關(guān)閉文件
3)文件讀取的時(shí)候,可以使用 read() 讀取所有的文件,也可以使用readline() 讀取文件的一行
4)注意原始文件的編碼,不指定pycharm默認(rèn)的是utf-8,編碼錯(cuò)誤就亂碼

4.寫文件
1)寫數(shù)據(jù)到文件,使用 write()函數(shù),但是不是直接寫到硬盤中,是先寫到內(nèi)存中,過一定時(shí)間之后寫到硬盤中。
2)可以使用 flush() (強(qiáng)刷內(nèi)存中數(shù)據(jù)到硬盤)

5.文件的常用操作
關(guān)鍵點(diǎn):文件中光標(biāo)的位置

seek()   # (注意:文件的編碼,整數(shù)倍的文件編碼單元的字節(jié))
truncate()  # 截?cái)鄶?shù)據(jù)
tell()   # 返回光標(biāo)的位置
修改文件局部內(nèi)容  
    占內(nèi)存修改
    占硬盤修改
   

6.附加了解內(nèi)容
1)給文件重命名
可以使用 : os.rename() 或者 os.replace()
注意:在使用with打開文件重命名的時(shí)候,會(huì)報(bào)錯(cuò),原因是當(dāng)前文件還沒有被關(guān)閉,是沒有辦法重命名的,可以更換打開方式,使用文件句柄打開。

2)sys.argv
sys.argv[]是從程序外部獲取參數(shù)
sys.argv[0]表示代碼本身文件路徑
不理解的可以參考一下 這篇文章;https://www.cnblogs.com/aland-1415/p/6613449.html

字符編碼

基礎(chǔ)知識(shí)

1.二進(jìn)制是什么?
二進(jìn)制是0與1,計(jì)算機(jī)只認(rèn)識(shí)二進(jìn)制。但是人并不認(rèn)識(shí)計(jì)算機(jī)認(rèn)識(shí)的二進(jìn)制(命令轉(zhuǎn)化的二進(jìn)制)。人只認(rèn)知命令。那么命令如何變?yōu)槎M(jìn)制就是需要解決的問題。

2.ASCII表可以干什么?
ASCII表表示的256個(gè)字符的順序表。既然有順序,那么人可以讀的是十進(jìn)制,而十進(jìn)制可以變?yōu)槎M(jìn)制,所以ASCII表也就是起到了特殊字符映射到二進(jìn)制的作用。
Python查看輸入字符對(duì)應(yīng)的二進(jìn)制的十進(jìn)制數(shù)是多少的函數(shù): ord('a')

注意:此時(shí)我們就可以輸入ASCII表中的字符,就會(huì)轉(zhuǎn)為二進(jìn)制,計(jì)算機(jī)就看懂了。見下圖ASCII表:

3.數(shù)據(jù)的表示
在計(jì)算機(jī)中,規(guī)定一個(gè)二進(jìn)制數(shù)為一個(gè)bit(位)。
八個(gè)二進(jìn)制數(shù)為八個(gè)bit,稱為1個(gè)bytes,表示1個(gè)字節(jié)。
進(jìn)而:1KB=1024B

GB2312與GBK

在基礎(chǔ)知識(shí),已經(jīng)知道了ASCII表是做什么的,那么現(xiàn)在可以表示ASCII表中的字符到計(jì)算機(jī)中了,此時(shí)其他除了ASCII表中的字符去哪里找,有怎么存儲(chǔ)到計(jì)算機(jī)中?
中國,最先使用的是 GB2312,隨著需要表示字符數(shù)量的增多,開始使用GBK。此時(shí)就可以將漢字轉(zhuǎn)換為計(jì)算機(jī)可以看懂的二進(jìn)制數(shù)。
注意: GBK是在ASCII表中的進(jìn)行的字符映射擴(kuò)展。此時(shí)表示一個(gè)漢字需要2個(gè)字節(jié)

unicode

unicode編碼,是將全球的語言字符進(jìn)行了整合,所有的語言字符都可以在unicode中找到。
注意:unicode編碼的所有字符全部需要4個(gè)字節(jié)。

utf家族

utf家族的代表明星是: utf-8。
由于使用unicode編碼,文件的存儲(chǔ)變大,并且不利于網(wǎng)絡(luò)數(shù)據(jù)的傳輸和存儲(chǔ),所以改進(jìn)的方式是utf家族,其中使用對(duì)多的就是utf-8.
UTF-8: 使用1、2、3、4個(gè)字節(jié)表示所有字符;優(yōu)先使用1個(gè)字符、無法滿足則使增加一個(gè)字節(jié),最多4個(gè)字節(jié)。英文占1個(gè)字節(jié)、歐洲語系占2個(gè)、東亞(中國)占3個(gè),其它及特殊字符占4個(gè)

編碼的轉(zhuǎn)換

1.前提知識(shí):
1)計(jì)算機(jī)的內(nèi)存中數(shù)據(jù),也就是內(nèi)存中的二進(jìn)制0和1,是使用 unicode 編碼。
2)所有的網(wǎng)絡(luò)傳輸與數(shù)據(jù)存儲(chǔ)(硬盤上的數(shù)據(jù)),是使用utf-8 編碼。
3)Windows系統(tǒng)的編碼是 gbk。

2.不同編碼轉(zhuǎn)換方法
使用unicode編碼作為中介,首先將源編碼文件進(jìn)行解碼(decode()解碼)成為unicode,再將unicode編碼(encode())成為目標(biāo)編碼格式。

3.pycharm中聲明編碼格式
推薦聲明:coding:utf-8 # -- encoding:utf-8 --
注意:第一行寫編碼聲明,此時(shí)pycharm會(huì)自動(dòng)將該文件的編碼格式變?yōu)閡tf-8.自己留意書寫與不寫聲明,pycharm右下角的變化。

結(jié)束語

小結(jié)一下,文件操作中,使用with語句打開的時(shí)候,如果對(duì)文件繼續(xù)操作,不手動(dòng)關(guān)閉,會(huì)報(bào)錯(cuò)。(自己踩得大坑,with語句不會(huì)在跳出with之后自動(dòng)關(guān)閉,有一定的時(shí)延)
字符編碼,真心不好理解,其實(shí)最簡單的方式就是,分開看內(nèi)存,硬盤,操作系統(tǒng),軟件,以及對(duì)應(yīng)的編碼是什么,就會(huì)很清楚了,祝大家學(xué)習(xí)愉快~~
一點(diǎn)感悟:時(shí)間很快,就是轉(zhuǎn)眼間的事,盡量將自己的時(shí)間進(jìn)行量化~~~

來源:https://www./content-4-351051.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多