1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        用 Python 刪除文件中的亂碼

        共 760字,需瀏覽 2分鐘

         ·

        2022-04-07 10:09

        當(dāng)我們用 Python 來(lái)處理有亂碼的文件時(shí),經(jīng)常會(huì)遇到編碼錯(cuò)誤,有時(shí)候不得不加一個(gè) errors = 'ignore' 參數(shù)來(lái)忽略錯(cuò)誤,今天分享一下如何用 Python 來(lái)刪除這些亂碼,得到一個(gè)干凈的文件。

        先說(shuō)下思路:用二進(jìn)制方式打開(kāi)文件,這樣就不會(huì)出現(xiàn)編碼問(wèn)題,然后讀取每一個(gè)字節(jié),只要這個(gè)字節(jié)不在我們使用編碼的范圍內(nèi),就把它踢掉,然后保存剩下的字節(jié),我們得到的就是一個(gè)干凈的文件。

        比如說(shuō)這樣 ascii 編碼的文件,它含有亂碼:

        處理之后是這樣的:

        代碼是這樣寫(xiě)的:

        import?struct?

        def?is_good_byte(b):
        ????"""
        ????可以自定義什么是好字節(jié),比如?GBK?的字節(jié)范圍可以在這里定義好
        ????"""

        ????return?b?<=?127

        def?clean_bytes(bs):
        ????return?filter(is_good_byte,?bs)

        def?clean_file_bin():
        ????with?open("names.txt",?mode?=?"rb")?as?reader:
        ????????with?open("cleaned_names.txt",?mode?=?"wb")?as?writer:
        ????????????for?line?in?reader:
        ????????????????for?byte?in?clean_bytes(line):
        ????????????????????writer.write(struct.pack('B',byte))

        if?__name__?==?'__main__':
        ????clean_file_bin()

        上面這段代碼是一個(gè)字節(jié)一個(gè)字節(jié)來(lái)處理的,如果是多字節(jié)編碼,可以自行修改代碼邏輯,比如一次讀取 3 個(gè)字節(jié),判斷這三個(gè)字節(jié)是否一個(gè)合法的字節(jié)組合。

        對(duì)于中英文混合的,比如:

        >>>?x
        'abc中國(guó)'
        >>>?x.encode("GBK")
        b'abc\xd6\xd0\xb9\xfa'
        >>>?for?i?in?x.encode("GBK"):
        ...?????print(i)
        ...
        97
        98
        99
        214
        208
        185
        250
        >>>

        需要綜合判斷,先判斷是否英文字母,是的就放行,然后看接下來(lái)的兩個(gè)字節(jié)是否在 GBK 的編碼范圍之內(nèi),是的就放行,不是就要?jiǎng)h除,看看是刪除一個(gè)字節(jié),還是兩個(gè)字節(jié)就要繼續(xù)判斷了。刪除的依據(jù)就是不會(huì)造成更多亂碼。

        今天的分享就到這里,如果有收獲請(qǐng)點(diǎn)贊哦。

        往期推薦

        1、一個(gè)「神奇」的Python庫(kù),99%的人都愛(ài)!
        2、看完微軟大神寫(xiě)的求平均值代碼,我意識(shí)到自己還是too young了
        3、美國(guó)國(guó)家安全局是如何入侵你的電腦的?
        4、美國(guó)四大科技巨頭:蘋(píng)果、微軟、Facebook、谷歌的愛(ài)恨情仇
        5、警惕!Python 中少為人知的 10 個(gè)安全陷阱!

        點(diǎn)擊關(guān)注公眾號(hào),閱讀更多精彩內(nèi)容
        瀏覽 75
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            动漫美女被到爽巨乳同人 | 少妇乱淫伦短篇小说全集 | 广东少妇大战黑人34厘米视频 | 蜜桃狠狠色伊人亚洲综合 | 乱子伦一级A片 | 69精品人人人 | 午夜操逼av | 88AV在线观看 | yw.193.爆乳尤物.ccm | 国产视频999 |