欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Python的文本文件轉(zhuǎn)換編碼問題

 更新時間:2023年04月17日 08:39:48   作者:CrazyDragon_King  
這篇文章主要介紹了關(guān)于Python的文本文件轉(zhuǎn)換編碼問題,編程過程中,經(jīng)成會遇到字符編碼的問題,需要的朋友可以參考下

前言 

因為編程的原因,經(jīng)成會遇到字符編碼的問題。如開發(fā)工具使用的是UTF-8編碼(推薦使用),然后需要導入一個從其它地方獲取的工程項目,但是這個工程使用了GBK編碼方式。這就導致了一個常見的問題 ——亂碼。

測試數(shù)據(jù)

在這里插入圖片描述

在這里插入圖片描述

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

編碼轉(zhuǎn)換代碼

import os

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


# 這個函數(shù)的功能和上面是一樣的,區(qū)別在于它是以二進制讀取的,然后解碼、轉(zhuǎn)碼再寫入的
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命令,可以查看文件的內(nèi)容,并且使用cmd默認的編碼。
# 使用 chcp 命令可以查看當前使用的編碼的數(shù)字編號

執(zhí)行結(jié)果

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

在這里插入圖片描述

測試文件夾 data1.txt是轉(zhuǎn)換編碼后的文本。

在這里插入圖片描述

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

注:GBK是兼容GB2312的編碼。

說明

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

 到此這篇關(guān)于關(guān)于Python的文本文件轉(zhuǎn)換編碼問題的文章就介紹到這了,更多相關(guān)Python的文本文件轉(zhuǎn)換編碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序python用戶認證的實現(xiàn)

    微信小程序python用戶認證的實現(xiàn)

    這篇文章主要介紹了微信小程序python用戶認證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 使用Python爬蟲庫BeautifulSoup遍歷文檔樹并對標簽進行操作詳解

    使用Python爬蟲庫BeautifulSoup遍歷文檔樹并對標簽進行操作詳解

    今天為大家介紹下Python爬蟲庫BeautifulSoup遍歷文檔樹并對標簽進行操作的詳細方法與函數(shù)
    2020-01-01
  • python requests更換代理適用于IP頻率限制的方法

    python requests更換代理適用于IP頻率限制的方法

    今天小編就為大家分享一篇python requests更換代理適用于IP頻率限制的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python網(wǎng)絡編程:socketserver的基本使用方法實例分析

    python網(wǎng)絡編程:socketserver的基本使用方法實例分析

    這篇文章主要介紹了python網(wǎng)絡編程:socketserver的基本使用方法,結(jié)合實例形式分析了python網(wǎng)絡編程中socketserver的基本功能、使用方法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • Django框架中間件定義與使用方法案例分析

    Django框架中間件定義與使用方法案例分析

    這篇文章主要介紹了Django框架中間件定義與使用方法,結(jié)合具體案例形式分析了Django框架中間件相關(guān)定義、原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-11-11
  • python連接讀寫操作redis的完整代碼實例

    python連接讀寫操作redis的完整代碼實例

    這篇文章主要介紹了python連接讀寫操作redis的完整代碼實例,包括redis連接與讀寫操作,redis-sentinel哨兵模式下Python操作redis,redis-cluster(集群)模式下Python操作redis,需要的朋友可以參考下
    2023-01-01
  • 淺談關(guān)于Python3中venv虛擬環(huán)境

    淺談關(guān)于Python3中venv虛擬環(huán)境

    這篇文章主要介紹了淺談關(guān)于Python3中venv虛擬環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • pytorch中的squeeze函數(shù)、cat函數(shù)使用

    pytorch中的squeeze函數(shù)、cat函數(shù)使用

    這篇文章主要介紹了pytorch中的squeeze函數(shù)、cat函數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python實現(xiàn)K-近鄰算法的示例代碼

    Python實現(xiàn)K-近鄰算法的示例代碼

    k-近鄰算法(K-Nearest Neighbour algorithm),又稱 KNN 算法,是數(shù)據(jù)挖掘技術(shù)中原理最簡單的算法。本文將介紹實現(xiàn)K-近鄰算法的示例代碼,需要的可以參考一下
    2022-09-09
  • python等間距取值方式

    python等間距取值方式

    這篇文章主要介紹了python等間距取值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論