91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python的文本文件轉換編碼問題怎么解決

發布時間:2023-04-17 10:00:48 來源:億速云 閱讀:119 作者:iii 欄目:開發技術

這篇文章主要介紹“Python的文本文件轉換編碼問題怎么解決”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python的文本文件轉換編碼問題怎么解決”文章能幫助大家解決問題。

測試數據

Python的文本文件轉換編碼問題怎么解決

Python的文本文件轉換編碼問題怎么解決

注:測試文本采用UTF-8編碼,通常漢字是占三個字節。GBK中漢字通常是占2個字節。

編碼轉換代碼

import os

# 對于單個文件進行操作的函數,如果需要對文件夾進行操作,可以使用一個函數包裝它,這樣不用修改本函數,即達到擴展的目的了。
def transfer_encode(source_path, target_path, source_encode='GBK', target_encode='UTF-8'):
    with open(source_path, mode='r', errors='ignore', encoding=source_encode) as source_file:  # 讀取文件時,如果直接忽略報錯,則程序正常執行,但是文件已經損壞了。
        with open(target_path, mode='w', encoding=target_encode) as target_file:               # 所以,應該捕獲異常,停止程序執行。
            line = source_file.readline()
            while line != '':
                target_file.write(line)
                line = source_file.readline()
    print("Execute End!")


# 這個函數的功能和上面是一樣的,區別在于它是以二進制讀取的,然后解碼、轉碼再寫入的
def transfer_encode2(source_path, target_path, source_encode='GBK', target_encode='UTF-8'):
    with open(source_path, mode='rb') as source_file:
        with open(target_path, mode="wb") as target_file:
            bs = source_file.read(1024)
            while len(bs) != 0:
                target_file.write(bs.decode(source_encode).encode(target_encode))
                bs = source_file.read(1024)
    print("Execute End!")



source_path = r'C:\Users\Alfred\Desktop\test_data\test\data.txt'
target_path = r'C:\Users\Alfred\Desktop\test_data\test\data1.txt'

transfer_encode(source_path=source_path, target_path=target_path, source_encode="UTF-8", target_encode="GBK")

# transfer_encode2(source_path=source_path, target_path=target_path)

# 在cmd中使用 type命令,可以查看文件的內容,并且使用cmd默認的編碼。
# 使用 chcp 命令可以查看當前使用的編碼的數字編號

執行結果

控制臺輸出 這個函數執行的輸出沒有什么意義,只是我要知道它執行了沒,所以打印的。

Python的文本文件轉換編碼問題怎么解決

測試文件夾 data1.txt是轉換編碼后的文本。

Python的文本文件轉換編碼問題怎么解決

Python的文本文件轉換編碼問題怎么解決

從生成的文件來看,因為只含有一個字,所以只比較大小就知道是否轉換成功了。當然了,直接打開查看也是可以的,但是直接打開查看的話,沒有什么效果,都會顯示一個漢字。所以,這里我們另辟蹊徑,使用不一樣的查看方式!

Python的文本文件轉換編碼問題怎么解決

注意:data.txt是采用的UTF-8編碼的,而data1.txt是采用的GBK編碼的。因為國內使用的Windows默認采用的中國的編碼方式,所以它顯示不了UTF-8編碼的文本。第三個輸出是查看當前使用的編碼,它返回的是編碼的代號,詳見下圖:

Python的文本文件轉換編碼問題怎么解決

注:GBK是兼容GB2312的編碼。

說明

使用python的話,對于單個文件進行編碼轉換,只需要7行代碼就夠了!上面我寫了兩個函數,但是功能是一樣的,區別在于第一個函數是以特定的編碼方式讀取文本信息,然后直接以另一種編碼方式寫入。第二個函數是以二進制形式讀取文件內容,然后解碼再轉碼寫入。它的原理都是一樣的,即必須包括依次解碼和轉碼操作。

編碼、解碼、字符集本身是很復雜的,往深入了講我也不會了。這里可以這樣簡化理解,兩個不同編碼的字符集具有相同的字符,所以將UTF-8編碼文件讀取出來,是為了得到它映射的字符,然后再寫入,是為了將它映射為另一種編碼字符集,所以說字符類似于中轉站的功能。 而直接使用一種字符集去讀取另一種字符集的內容,就會出現上面cmd中顯示的亂碼。

Python的文本文件轉換編碼問題怎么解決

PS: 所以,也可以解釋一個問題,即為什么打開一個大的文本文件,會導致程序卡死!因為一個大的文本文件,里面包含了很多需要解碼的字符。這就和排隊有點類似,每一個字符等待被解碼,雖然處理一個字符很快,但是一個大的文本文件,包含了大量的字符。例如,notepad++打開大文本毫無壓力, 我打開這個超大型的文本,還是直接把它卡死了!(這里的排隊只是一個比喻,實際的情況我也不太清楚,但是它一定是需要挨個處理的。)

Python的文本文件轉換編碼問題怎么解決

我們對其進行估計,假設所有字符都是中文(實際的話,還是包含一些英文的,當總的來說還是中文占多數。)這里顯示是大約5千萬的字符需要解碼,所以計算機處理起來仍然是很吃力的,notepad++可以查看摘要,但是直接打開就卡死了,這里就不進行嘗試了。

Python的文本文件轉換編碼問題怎么解決

關于“Python的文本文件轉換編碼問題怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

都兰县| 蓝田县| 苍梧县| 新邵县| 肥乡县| 神农架林区| 广南县| 留坝县| 衡水市| 静乐县| 南宫市| 元朗区| 中卫市| 富蕴县| 富民县| 临沧市| 雷波县| 清水县| 泸州市| 靖安县| 武安市| 陕西省| 诏安县| 黄大仙区| 凤阳县| 浑源县| 砚山县| 柳林县| 广州市| 合水县| 佛学| 来安县| 册亨县| 呈贡县| 尉犁县| 中阳县| 秦皇岛市| 海城市| 普兰店市| 黄骅市| 于田县|