自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

處理統(tǒng)一碼文件是場噩夢?這些訣竅助你大夢初醒

開發(fā) 后端 開發(fā)工具
本文將探討一些可以用于處理Python中統(tǒng)一碼文件的方法,從可用模式和標準編碼來入手。

[[274879]]

對于那些經(jīng)常在日常工作中處理統(tǒng)一碼文件(也適用于其他編碼)的人來說,這篇文章是必讀的。對于自然語言處理的從業(yè)者,處理統(tǒng)一碼文件是一場噩夢,尤其是使用Windows操作系統(tǒng)。想象一下,當在編碼或解碼過程中遇到錯誤時的沮喪,例如:

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

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

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

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

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

統(tǒng)一碼聯(lián)盟的官方標志

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

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

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

默認模式是'rt' ,即讀取和發(fā)送文件。可以使用以下代碼編寫:

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

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

  • r:打開閱讀(默認)
  • w:打開寫入,首先截斷文件
  • x:打開專屬創(chuàng)建,如果文件已經(jīng)存在則失敗
  • a:打開寫入,如果文件存在,則添加到文件末尾
  • b:二進制模式
  • t:文本模式(默認)
  • +:打開一個磁盤文件進行更新(讀寫)

可以組合一些模式。如原始文檔中所述(https://docs.python.org/3.5/library/functions.html#open),對于二進制讀寫訪問,模式'w+b' 打開并將文件截斷為0字節(jié)。'r+b' 打開文件不會截斷。

Python中的標準編碼

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

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

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

更多關于可用編碼的信息:

https://docs.python.org/3.7/library/codecs.html#standard-encodings

如果不知道文件中使用的什么編碼該怎么辦?一起進入下一部分來了解更多。

通過Notepad++檢查編碼類型

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

一個使用UTF-8編碼的示例文件

一個使用UTF-8編碼的示例文件

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

單擊編碼菜單時顯示下拉菜單的圖像

單擊編碼菜單時顯示下拉菜單的圖像

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

  • 用個人希望的編碼創(chuàng)建一個空的文本文件。
  • 從原始文件中復制所有內容。
  • 將其粘貼到新文件并保存。

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

處理未知編碼中的字符

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

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

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

  • 嚴格:如果存在編碼錯誤,則會造成ValueError 異常。None的默認值有相同效果。
  • 忽略:忽略錯誤。注意,忽略編碼錯誤會導致數(shù)據(jù)丟失。
  • 替換:將替換標記(如'?')插入有畸形數(shù)據(jù)的位置。
  • surrogateescape:將統(tǒng)一碼私有使用區(qū)域中的任何不正確字節(jié)表示為代碼點,范圍從U+DC80到U+DCFF。當這個錯誤處理程序用于編寫數(shù)據(jù)時,這些私有代碼點將被轉為相同字節(jié)。這對于處理未知編碼的文件很有用。
  • xmlcharrefreplace:僅在寫入文件時受支持。不受編碼支持的字符將被替換為適當?shù)目蓴U展標記語言的字符引用 &#nnn;。
  • backslashreplace:用Python的backslash轉義字符替換畸形數(shù)據(jù)。
  • namereplace:(僅在編寫時支持)替換不支持的 \N{...} 轉義字符。

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

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

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

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

  • 右鍵單擊頂部菜單并單擊屬性。
  • 單擊字體菜單。
  • 將字體修改為可顯示字符的所需字體。例如,可以使用楷體來呈現(xiàn)中文字符。

命令提示符的字體屬性

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

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

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

試圖通過read_csv讀取文件將會拋出錯誤,因為文件路徑包含統(tǒng)一碼字符。在Python中使用內置的open()函數(shù)不是問題所在。為了解決這個問題,需要先打開文件,然后傳遞給read_csv函數(shù):

  1. with open(file_path, 'r', encoding='utf-8') as f: 
  2.     df = pd.read_csv(f, encoding='utf-8'
責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2021-08-20 14:23:14

鴻蒙HarmonyOS應用

2020-06-08 14:44:56

SIM卡攻擊交換攻擊

2022-01-18 09:00:00

架構服務器一碼通

2021-03-11 07:27:19

ZooKeeper選舉機制

2020-02-19 14:51:15

程序系統(tǒng)工程師

2023-03-30 10:22:42

數(shù)據(jù)處理前端

2020-01-13 16:54:21

微認醫(yī)保電子憑證醫(yī)院

2017-07-18 09:00:59

GitGitHub移動應用

2019-08-08 16:55:34

北京公交一碼通乘公交APP

2023-11-28 14:32:04

2022-06-09 10:34:44

架構數(shù)據(jù)

2022-01-07 14:35:17

一碼通大數(shù)據(jù)

2021-01-26 12:14:40

Windows 10Windows微軟

2019-02-24 17:57:58

2022-06-28 18:20:07

Web3

2016-01-20 09:49:23

Android安卓應用商店

2024-04-28 11:39:17

紹csvkit數(shù)據(jù)分析

2024-03-04 10:21:59

KubernetesDeployment云原生

2012-06-13 16:37:50

點贊
收藏

51CTO技術棧公眾號