Python 编码检测与编码转换
生活随笔
收集整理的這篇文章主要介紹了
Python 编码检测与编码转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這次的上機實驗有一道關于編碼的題目,如下:
編寫程序,用戶在命令提示行輸入文件名和該文件的編碼格式,讀入文件,將其轉存成UTF-8格式。如果用戶沒有指定輸入文件的編碼格式,則使用chardet模塊“猜”出其編碼格式,用于解碼。使用argparse模塊解析用戶命令提示行輸入。
老師上課并沒有講這兩個模塊,因此我便去了解了一下。簡單來說,導入chardet模塊后使用其中的dectect方法檢測,會返回一個字典?
>>> chardet.detect(file.read()) {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}encoding鍵值即是檢測出的編碼格式,confidence鍵值即是檢測正確的概率。
而argparse模塊是用于命令行選項與參數解析的模塊,我們這里會用到的有如下三個方法:
1、使用 ArgumentParser() 創建對象
2、使用 add_argument() 添加參數
3、使用 parse_args() 解析添加的參數
代碼如下:
import argparse import chardet parser=argparse.ArgumentParser(description='change encoding') parser.add_argument('name',help='file name') parser.add_argument('--encode',help='show encoding') args=parser.parse_args()#編碼檢測 with open(args.name,'rb') as f: #注意要二進制讀取 才能decodefile_data=f.read()if not args.encode: #若未輸入編碼格式,則檢測args.encode=chardet.detect(file_data)['encoding'] #將返回的字典中對應的值賦給args.encodeprint(args.encode) #打印原編碼格式#編碼轉換 f = open(args.name, "r", encoding=args.encode) #以原編碼格式打開 text=f.read() f.close() f = open(args.name,'w',encoding='utf-8') #以utf-8編碼格式打開 f.write(text) f.close() with open(args.name,'rb') as f: #輸出新的編碼格式以檢查是否轉換成功print(chardet.detect(f.read())['encoding'])運行結果:(文件內容為:你說的安德森阿瑟東)
我們使用命令行運行該py文件,先輸入-h獲取幫助,了解相關信息。
?
現在,我們先輸入一個參數,即文件地址(--encode為optional參數,可不輸入)
可以發現轉換成功了。
最后,我們將兩個參數都輸入,我們看看輸入編碼格式為ascii會發生什么
由于文件內容為中文,果然不能用ascii來解碼,報錯了。
?
最后:這道題弄了很久,但總算做出來了,應該是算做對了,放在這里記錄一下。
?
?
總結
以上是生活随笔為你收集整理的Python 编码检测与编码转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: echart表格颜色设置
- 下一篇: 字符串加密解密处理