最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言 

因?yàn)榫幊痰脑?,?jīng)成會(huì)遇到字符編碼的問(wèn)題。如開發(fā)工具使用的是UTF-8編碼(推薦使用),然后需要導(dǎo)入一個(gè)從其它地方獲取的工程項(xiàng)目,但是這個(gè)工程使用了GBK編碼方式。這就導(dǎo)致了一個(gè)常見的問(wèn)題 ——亂碼。

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

在這里插入圖片描述

在這里插入圖片描述

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

編碼轉(zhuǎn)換代碼

import os

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


# 這個(gè)函數(shù)的功能和上面是一樣的,區(qū)別在于它是以二進(jìn)制讀取的,然后解碼、轉(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默認(rèn)的編碼。
# 使用 chcp 命令可以查看當(dāng)前使用的編碼的數(shù)字編號(hào)

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

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

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

從生成的文件來(lái)看,因?yàn)橹缓幸粋€(gè)字,所以只比較大小就知道是否轉(zhuǎn)換成功了。當(dāng)然了,直接打開查看也是可以的,但是直接打開查看的話,沒(méi)有什么效果,都會(huì)顯示一個(gè)漢字。所以,這里我們另辟蹊徑,使用不一樣的查看方式!

在這里插入圖片描述

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

在這里插入圖片描述

注:GBK是兼容GB2312的編碼。

說(shuō)明

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

相關(guān)文章

  • python字典改變value值方法總結(jié)

    python字典改變value值方法總結(jié)

    在本文里小編給大家分享了關(guān)于python字典如何改變value值的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,需要的朋友們學(xué)習(xí)下。
    2019-06-06
  • 詳解Python中的文件操作

    詳解Python中的文件操作

    今天這篇文章給大家介紹Python中的文件操作,文章內(nèi)容介紹的很詳細(xì),有需要的可以參考借鑒。
    2016-08-08
  • Python中字符串的基本使用詳解

    Python中字符串的基本使用詳解

    Python要求字符串必須使用引號(hào)括起來(lái),使用單引號(hào)也行,使用雙引號(hào)也行,只要兩邊的引號(hào)能配對(duì)即可,這篇文章主要給大家介紹了關(guān)于Python中字符串的基本使用,需要的朋友可以參考下
    2021-12-12
  • python刪除某個(gè)字符

    python刪除某個(gè)字符

    這篇文章主要介紹了python刪除某個(gè)字符,現(xiàn)在發(fā)布的是一個(gè)比較簡(jiǎn)單易行的方法,就是遇到該字符便跳過(guò)去,不對(duì)其進(jìn)行操作,完美呈現(xiàn)出刪除該字符的功能,需要的朋友可以參考下
    2018-03-03
  • fastapi與django異步的并發(fā)對(duì)比分析

    fastapi與django異步的并發(fā)對(duì)比分析

    這篇文章主要介紹了fastapi與django異步的并發(fā)對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • pandas進(jìn)階教程之Dataframe的apply方法

    pandas進(jìn)階教程之Dataframe的apply方法

    DataFrame中的apply方法就是將函數(shù)應(yīng)用到由列或行形成的一維數(shù)組上,下面這篇文章主要給大家介紹了關(guān)于pandas進(jìn)階教程之Dataframe的apply方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 如何基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)

    如何基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)

    最近開始學(xué)習(xí)opencv,想檢測(cè)圖片上的圓環(huán),發(fā)現(xiàn)霍夫變換可以做這樣的效果出來(lái),于是嘗試用霍夫變換做了下圓環(huán)檢測(cè),這篇文章主要給大家介紹了基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python實(shí)現(xiàn)自動(dòng)化腳本編寫

    python實(shí)現(xiàn)自動(dòng)化腳本編寫

    自動(dòng)化在很多時(shí)候是很方便的,本文以修改用戶名密碼單元為案例,編寫測(cè)試腳本。完成修改用戶名密碼模塊單元測(cè)試,感興趣的可以了解一下
    2021-06-06
  • python 讀取.nii格式圖像實(shí)例

    python 讀取.nii格式圖像實(shí)例

    這篇文章主要介紹了python 讀取.nii格式圖像實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 一篇文章搞懂Python反斜杠的相關(guān)問(wèn)題

    一篇文章搞懂Python反斜杠的相關(guān)問(wèn)題

    這篇文章主要給大家介紹了如何通過(guò)一篇文章搞懂Python反斜杠的相關(guān)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

科技| 花垣县| 甘孜| 青龙| 清原| 竹北市| 江口县| 嫩江县| 郓城县| 云阳县| 乐安县| 台山市| 苏尼特左旗| 舒兰市| 象山县| 监利县| 屏东市| 崇阳县| 金昌市| 泊头市| 揭东县| 绥化市| 邢台市| 隆林| 原平市| 娄底市| 方山县| 大城县| 余干县| 大方县| 天门市| 博乐市| 独山县| 靖安县| 铜川市| 宣汉县| 大关县| 灵川县| 东丽区| 农安县| 黄陵县|