A. 亂碼文件怎麼刪除
亂碼文件怎麼刪除(亂碼文件電腦 怎麼刪除掉)當我們用 python 來處理有亂碼的文件時,經常會遇到編碼錯誤,有時候不得不加一個 errors = 'ignore' 參數來忽略錯誤,
今天分享一下如何用 Python 刪除這些亂碼,得到一個干凈的文件。
先說下思路:用二進制方式打開文件,這樣就不會出現編碼問題,然後讀取每一個位元組,只要這個位元組不在我們使用編碼的范圍內,就把它踢掉,然後保存剩下的位元組,我們得到的就是一個干凈的文件。
比如說這樣 ascii 編碼的文件,它含有亂碼:
處理完之後是這樣的:
代碼是這樣寫的:
import struct def is_good_byte(b): """ 電腦 可以自定義什麼是好位元組,比如 GBK 的位元組范圍可以在這里定義好 """ return b <= 127def 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()
上面這段代碼是一個位元組一個位元組來處理的,如果是多位元組編碼,可以自行修改代碼邏輯,比如一次讀取 3 個位元組,判斷這三個位元組是否一個合法的位元組組合。
對於中英文混合的,比如:
>>> x'abc中國'>>> x.encode("GBK")b'abcxd6xd0xb9xfa'>>> for i in x.encode("GBK"):... print(i)...979899214208185250>>>
需要綜合判斷,先判斷是否英文字母,是的就放行,然後看接下來的兩個位元組是否在 GBK 的編碼范圍之內,是的就放行,不是就要刪除,看看是刪除一個位元組,還是兩個位元組就要繼續判斷了。刪除的依據就是不會造成更多亂碼。
電腦原文鏈接:
https://mp.weixin.qq.com/s/ZhsbGIoR6HkJHetlOjStWQ
B. 超簡單:Python 5步去中國式報表表頭
面對帶有中國式報表表頭的Excel文件,繁瑣的手動調整操作可能會給數據處理帶來極大不便。為提高效率,通過Python進行自動化處理成為了一個更加便捷的選擇。下面是使用Python進行簡單步驟處理的方法:
為了適應您的工作需求,確保代碼的通用性與靈活性,請將「file_path」修改為您所需的文件路徑,路徑應為Windows系統文件路徑,並在路徑前後添加單引號或雙引號。同時,文件路徑允許包含中文字元。
在處理時,選擇一個適合的文件名,即「df」,您可以根據實際情況進行修改。
若報表表頭為多行,例如第二行開始,設置「skiprow=1」;如果表頭包含n行,則將「skiprow」值調整為n-1。
「name=None」部分無需改動。
針對數據范圍的讀取,使用「usecols=』A:AH』」進行指定。若不需特定列范圍,可省略此步驟。對於非連續列的讀取,可以採用「usecols=『A,C,E:AH』」的格式,其中單列間用英文逗號分隔,連續列用英文冒號。
如果文件包含多個sheet頁,需要在「sheet_name」參數中列出,例如「sheet_name=['sheet名稱', 'sheet名稱']」。注意,英文名稱需注意大小寫。
在進行數據處理後,保存文件時確保與「df」保持一致性,並選擇期望的導出位置及文件名。此操作將自動覆蓋同名文件。
在處理過程中,使用英文中括弧「[]」定義列名,並確保其順序與「usecols」一致。列名使用英文時,輸入更加便捷。中文列名應使用單引號或雙引號括起。
最後,根據實際需求調整「encoding」參數,以解決中文字元可能導致的亂碼問題。默認設置通常能夠滿足基本需求,無需額外調整。
綜上所述,通過上述Python代碼的五個步驟,您可實現高效處理帶有中國式報表表頭的Excel文件,大大提升工作效率,並確保工作流程的一致性與穩定性。
C. python解決csv文件用excel打開亂碼問題
【問題】
python輸出的csv文件用excel打開,裡面的中文會變成亂碼,但用window下的記事本或mac下的numbers打開就正常顯示。
原因是python輸出的文件是utf-8編碼寫入的,excel默認以gbk方式讀取,導致亂碼發生。
【解決方法1】文件產出時encoding設置為utf-8-sig
用excel打開csv時,excel會先檢查文件的第一個字元,來了解這個文件是什麼編碼方式,如果這個字元是BOM,excel就知道用utf-8的方式打開這個文件。python自帶了處理BOM的編碼方式uft-8-sig,因此只需要在文件產出時將encoding設置為utf-8-sig。
如果文件不是由python產出的,只需要以utf-8方式讀入再以utf-8-sig方式存儲即可
【解決方法2】懶人法,適用只含簡體中文的文件
用記事本打開,點擊另存為,右下角編碼方式選擇「ANSI」,這個過程是把這個文件改成gbk編碼格式,excel就是默認用gbk方式打開的。
參考: Python寫的csv文件,如何讓 Excel 雙擊打開不亂碼? - 雲+社區 - 騰訊雲
對編碼格式一竅不通的可以閱讀以下網頁
python筆記——二進制和文件編碼_砍柴姑娘Jourosy的博客-CSDN博客
編碼方式之ASCII、ANSI、Unicode概述 - 藍海人 - 博客園
【簡單總結】:
1. 首先需要了解 字元集 和 字元編碼 兩個概念,字元集定義了字元和二進制的一一對應關系,字元編碼規定了如何將字元的編號存儲到計算機中。
2. Unicode是字元集,包含了全球文字的唯一編碼,utf-8是編碼方式,將unicode以某種方式存儲到計算機中。
3. 有些字元集和編碼是結合在一起的,稱作字元集還是編碼都無所謂,比如ASCII,GBK
4. ANSI是各個國家地區不同擴展編碼方式的總稱,互不兼容(可以看出來通用性沒有utf好)
5. 不同編碼方式在轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字元串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。