[python]轉換檔案編碼格式
檔案編碼格式一直是很多人特別頭疼的一件事情,最近由於跨平臺開發,經常出現編碼格式的問題。所以關於編碼格式轉換採用python的方式記錄下來以便後期需要。讓我們一起走進python對編碼格式的操作之路
編碼格式介紹
- ASCII碼:使用單位元組編碼,所以範圍基本只有英文字母、數字和一些特殊字元;只有256個位元組。
- Unicode:能夠表示全世界的所有字元。
- GBK:只用來編碼漢字的,GBK全稱《漢字編碼擴充套件規範》雙位元組編碼。
- UTF-8:針對Unicode的可變字元編碼,又稱萬能碼。
三方庫檔案
chardet、codecs
庫檔案簡介
- ofollow,noindex">引用codecs介紹如下
在Python中,codecs模組提供了實現這些規則的方法,通過模組公開的方法我們能夠方便地獲取某種編碼方式的Encoder和 Decoder工廠函式(Factory function),以及StreamReader、StreamWriter和StreamReaderWriter類。
在處理字串時,常常會遇到不知道字串是何種編碼,如果不知道字串的編碼就不能將字串轉換成需要的編碼。面對多種不同編碼的輸入方式,是否會有一種有效的編碼方式?chardet是一個非常優秀的編碼識別模組。
程式碼轉換例項
Main函式
import os import sys import codecs import chardet #將路徑下面的所有檔案,從原來的格式變為UTF-8的格式 def Main(): path = '檔案路徑' (floders, files) = list_folders_files(path) for file in files: file_name =os.path.join(floders,file) with open(file_name, "rb") as f_in: data = f.read() code_type = chardet.detect(data)['encoding'] file_convert(file_name,file, code_type, 'UTF-8')
檔案轉換程式碼
def convert(file_name,file, in_code="GBK", out_code="UTF-8"): """ 該程式用於將目錄下的檔案從指定格式轉換到指定格式,預設的是GBK轉到UTF-8 :param file:檔案路徑 :param in_code:輸入檔案格式 :param out_code: 輸出檔案格式 :return: """ out_path='輸出檔案路徑' try: with codecs.open(file_name, 'r', incode) as f_in: new_content = f_in.read() f_out = codecs.open(os.path.join(out_path,file), 'w', out_code) f_out.write(new_content) f_out.close except IOError as err: print("I/O error: {0}".format(err))
獲取指定資料夾下檔案
import os def list_folders_files(path): """ 返回 "資料夾" 和 "檔案" 名字 :param path: "資料夾"和"檔案"所在的路徑 :return:(list_folders, list_files) :list_folders: 資料夾 :list_files: 檔案 """ list_folders = [] list_files = [] for file in os.listdir(path): file_path = os.path.join(path, file) if os.path.isdir(file_path): list_folders.append(file) else: list_files.append(file) return (list_folders, list_files)
Linux 命令列轉換
iconv命令用於檔案編碼的轉換,
碰到gbk編碼的檔案,需要轉換成utf8,直接使用該命令即可。
命令用法
- iconv --list:列出iconv支援的編碼列表
語法
iconv -f 原編碼 -t 新編碼 filename -o newfile
引數說明
引數 | 引數描述 |
---|---|
-f | from 來源編碼 |
-t | to 轉換後新編碼 |
-c | 忽略無效字元 |
-s | --silent,忽略警告 |
-o file |
可選,沒有的話直接, 轉換當前檔案,使用-o 保留原始檔 |
命令例項
-
檢視檔案
$ file test test: UTF-8 Unicode text
-
轉換
$ iconv -f utf8 -t gbk test -o test.gbk
-
效果
$ file test* test:UTF-8 Unicode text test.gbk:ISO-8859 text