溫馨提示×

溫馨提示×

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

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

python處理統(tǒng)一碼文件的方法是什么

發(fā)布時(shí)間:2022-01-07 14:37:40 來源:億速云 閱讀:246 作者:iii 欄目:編程語言

這篇文章主要講解了“python處理統(tǒng)一碼文件的方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python處理統(tǒng)一碼文件的方法是什么”吧!

對(duì)于自然語言處理的從業(yè)者,處理統(tǒng)一碼文件是一場噩夢,尤其是使用Windows操作系統(tǒng)。想象一下,當(dāng)在編碼或解碼過程中遇到錯(cuò)誤時(shí)的沮喪,例如:

UnicodeEncodeError: 'mbcs' codec can't decode characters in   positionUnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position

大多數(shù)時(shí)候,除非是這個(gè)領(lǐng)域經(jīng)驗(yàn)豐富的人,否則這樣的錯(cuò)誤并不能提供足夠的信息。你可能會(huì)問為什么需要對(duì)字符進(jìn)行編碼和解碼。我們可以從對(duì)統(tǒng)一碼的簡單解釋來回答這個(gè)問題。

基于官方python文檔,統(tǒng)一碼Unicode  (通用編碼字符集)是一種規(guī)范,旨在列出人類語言使用的每個(gè)字符,并為每個(gè)字符提供各自獨(dú)特的代碼。統(tǒng)一碼規(guī)范不斷被修訂和更新,以添加新的語言和符號(hào)。

因此,編碼和解碼是一種將字符從文本映射到字節(jié)的方法,反之亦然。這使得它們可在計(jì)算機(jī)之間傳輸,并在日常生活中使用。當(dāng)擁有不同的操作系統(tǒng)集時(shí),情況會(huì)更復(fù)雜。

此外,不同語言有各自的字符集,只能在特定字體下顯示。簡單而言,可以看作是將一個(gè)外文字符翻譯成機(jī)器能理解的字符。本文將探討一些可以用于處理Python中統(tǒng)一碼文件的方法,從可用模式和標(biāo)準(zhǔn)編碼來入手。

通過上下文管理器讀寫文件

打開文件最安全的方法是通過上下文管理器使用with語句。它將自動(dòng)關(guān)閉文件,防止任何可能出現(xiàn)的問題。

with open('name.txt') as f:     f.readlines()

默認(rèn)模式是'rt' ,即讀取和發(fā)送文件??梢允褂靡韵麓a編寫:

with open('name.txt', 'w') as f:     f.write('Hello world!')

上面的代碼將改寫并截?cái)辔募?。在一些情況下,可能更喜歡使用模式 'a'而不是'w'。以下列表顯示了可用的完整模式:

  • r:打開閱讀(默認(rèn))

  • w:打開寫入,首先截?cái)辔募?/p>

  • x:打開專屬創(chuàng)建,如果文件已經(jīng)存在則失敗

  • a:打開寫入,如果文件存在,則添加到文件末尾

  • b:二進(jìn)制模式

  • t:文本模式(默認(rèn))

  • +:打開一個(gè)磁盤文件進(jìn)行更新(讀寫)

可以組合一些模式。如原始文檔中所述(https://docs.python.org/3.5/library/functions.html#open),對(duì)于二進(jìn)制讀寫訪問,模式'w+b'  打開并將文件截?cái)酁?字節(jié)。'r+b' 打開文件不會(huì)截?cái)唷?/p>

Python中的標(biāo)準(zhǔn)編碼

在Python中指定編碼,只需在上下文管理器初始化期間傳入另一個(gè)參數(shù)。無論何時(shí)讀寫統(tǒng)一碼字符,都需要指定它。以下例子顯示了將統(tǒng)一碼文本添加到現(xiàn)有文件的正確方法:

with open('name.txt', 'a', encoding='utf8') as f: f.write('你好!')

如果不確定使用哪種編碼,只需輸入  utf8并檢查是否有誤。大多情況下,UTF-8對(duì)于編碼和解碼字符已經(jīng)夠好了。然而在某些情況下,需要使用不同的編碼。

通過Notepad++檢查編碼類型

一般會(huì)更傾向使用Notepad++來查看文件內(nèi)容。如果使用Notepad++打開一個(gè)文件,可以在用戶界面的右下角看到使用的編碼類型。

python處理統(tǒng)一碼文件的方法是什么

一個(gè)使用UTF-8編碼的示例文件

可以通過編碼菜單修改編碼,它接受大量最常用的編碼。

python處理統(tǒng)一碼文件的方法是什么

單擊編碼菜單時(shí)顯示下拉菜單的圖像

如果曾遇到過無法將文件轉(zhuǎn)換為另一種編碼的問題,或者即使正確地指定了某些編碼,也無法讀取,那么可以嘗試以下方法。雖然有點(diǎn)笨,但親測有效。

  • 用個(gè)人希望的編碼創(chuàng)建一個(gè)空的文本文件。

  • 從原始文件中復(fù)制所有內(nèi)容。

  • 將其粘貼到新文件并保存。

大多數(shù)情況下,這將自動(dòng)將所有字符轉(zhuǎn)換為新的編碼。請(qǐng)注意,如果不能根據(jù)新的編碼轉(zhuǎn)換字符,可能會(huì)造成數(shù)據(jù)丟失。

處理未知編碼中的字符

如果遇到無法識(shí)別編碼且字符未知的情況,可以嘗試修改錯(cuò)誤參數(shù)來解決這個(gè)問題:

with open('name.txt', 'r', encoding='utf8', errors='ignore') as f:     f.readlines()

錯(cuò)誤參數(shù)指的是如何處理編碼和解碼錯(cuò)誤。請(qǐng)注意,此參數(shù)不能在二進(jìn)制模式中使用??捎缅e(cuò)誤的處理程序有:

  • 嚴(yán)格:如果存在編碼錯(cuò)誤,則會(huì)造成ValueError 異常。None的默認(rèn)值有相同效果。

  • 忽略:忽略錯(cuò)誤。注意,忽略編碼錯(cuò)誤會(huì)導(dǎo)致數(shù)據(jù)丟失。

  • 替換:將替換標(biāo)記(如'?')插入有畸形數(shù)據(jù)的位置。

  • surrogateescape:將統(tǒng)一碼私有使用區(qū)域中的任何不正確字節(jié)表示為代碼點(diǎn),范圍從U+DC80到U+DCFF。當(dāng)這個(gè)錯(cuò)誤處理程序用于編寫數(shù)據(jù)時(shí),這些私有代碼點(diǎn)將被轉(zhuǎn)為相同字節(jié)。這對(duì)于處理未知編碼的文件很有用。

  • xmlcharrefreplace:僅在寫入文件時(shí)受支持。不受編碼支持的字符將被替換為適當(dāng)?shù)目蓴U(kuò)展標(biāo)記語言的字符引用 &#nnn;。

  • backslashreplace:用Python的backslash轉(zhuǎn)義字符替換畸形數(shù)據(jù)。

  • namereplace:(僅在編寫時(shí)支持)替換不支持的 \N{...} 轉(zhuǎn)義字符。

在命令提示符中顯示統(tǒng)一碼字符

如果在Windows操作系統(tǒng)中運(yùn)行命令提示符,那么在大多數(shù)情況下顯示統(tǒng)一碼字符都會(huì)有問題,出現(xiàn)如下圖所示的亂碼字符:

python處理統(tǒng)一碼文件的方法是什么

顯示亂碼字符的命令提示符

為了解決這個(gè)問題,需要將設(shè)置更改為正確的字體。

  • 右鍵單擊頂部菜單并單擊屬性。

  • 單擊字體菜單。

  • 將字體修改為可顯示字符的所需字體。例如,可以使用楷體來呈現(xiàn)中文字符。

python處理統(tǒng)一碼文件的方法是什么

命令提示符的字體屬性

打開一個(gè)有統(tǒng)一碼字符的文件路徑——通過pandas模塊適用于read_csv

這部分有點(diǎn)棘手,尤其是在使用某些特定Python模塊(如pandas)時(shí)。假設(shè)有以下非英語的文件路徑:

file_path = 'C:\path\to\數(shù)據(jù)分析\data.csv'

試圖通過read_csv讀取文件將會(huì)拋出錯(cuò)誤,因?yàn)槲募窂桨y(tǒng)一碼字符。在Python中使用內(nèi)置的open()函數(shù)不是問題所在。為了解決這個(gè)問題,需要先打開文件,然后傳遞給read_csv函數(shù):

with open(file_path, 'r', encoding='utf-8') as f:     df = pd.read_csv(f, encoding='utf-8')

感謝各位的閱讀,以上就是“python處理統(tǒng)一碼文件的方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)python處理統(tǒng)一碼文件的方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI