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 刪除文件中的亂碼

        共 698字,需瀏覽 2分鐘

         ·

        2021-11-27 21:20

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

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

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

        處理之后是這樣的:

        代碼是這樣寫的:

        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()

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

        對于中英文混合的,比如:

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

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

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



        瀏覽 75
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        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>
            丁香五月婷婷综合网 | 羞羞色院91蜜桃 | 国产精品免费久久久久 | 国产操逼一区 | 少妇乱淫小说 | 国产精品成人久久 | 婷婷好色五月天 | 无码日韩一区二区 | 啊啊啊快高潮了短片 | 欧美成人视屏 |