您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用Python批量對文本文件編碼互轉”,在日常操作中,相信很多人在怎么使用Python批量對文本文件編碼互轉問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Python批量對文本文件編碼互轉”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在Windows下寫C語言默認是GB2312,放到Linux上就會亂碼,因為Linux和MacOS默認是UTF-8,因此寫了個Python小腳本對指定路徑下的文件進行轉換。
from sys import argv import os from chardet import detect from codecs import lookup CONFIG_FILE = '.any2any' DEFAULT_CONFIG = ''' .c .h .cpp .hpp .hxx .cc .cxx .C .c++ .m .cs .rs .java .kt .php .pm .pl .py .sh .go .xml .htm .html .css .js .jsx .vue .txt .csv ''' if os.path.exists(CONFIG_FILE): with open(CONFIG_FILE, 'r') as config_file: file_extension = tuple(config_file.read().split()) else: file_extension = tuple(DEFAULT_CONFIG.split()) print(f"將轉換 {' '.join(list(file_extension))}") def bytes_encoding(b: bytes, length: int = 1024) -> str: ''' 返回探測到的編碼格式 ''' return detect(b[:length])['encoding'] def any2any(b: bytes, encoding: str) -> bytes: ''' 任意編碼字節轉換為任意編碼字節 探測輸入的字節編碼格式,轉換為指定編碼,并返回對應字節 ''' file_encoding = bytes_encoding(b) if file_encoding == encoding: return b return lookup(encoding).encode(lookup(file_encoding).decode(b)[0])[0] def allfileset(path: str = '.', filepathset: set = set()) -> set: ''' 遞歸路徑下所有文件,返回絕對路徑集合 ''' if os.path.isdir(path): for item in os.listdir(path): filepath = os.path.join(path, item) if os.path.isfile(filepath): filepathset.add(os.path.abspath(filepath)) else: allfileset(filepath, filepathset) else: filepathset.add(os.path.abspath(path)) return filepathset def is_valid_inputs() -> bool: ''' 檢查參數是否輸入正確 ''' return len(argv) > 1 and all(map(os.path.exists, argv[1:])) def is_valid_encoding(encoding: str) -> bool: ''' 檢查是否存在指定編碼 ''' try: lookup(encoding) return True except: return False def choice_encoding() -> str: choice = input('''!!!在轉換前注意備份文件!!! 要轉換到什么編碼? 1. GB18030(Windows下常用,C語言不會亂碼) 2. UTF-8(非Windows下通用,例如Linux和macOS) 3. 其他 > ''') if choice == '1': return 'GB18030' elif choice == '2': return 'UTF-8' elif choice == '3': choice = input('輸入你想轉換到的編碼:') while not is_valid_encoding(choice): choice = input('不存在該編碼,重新輸入:') return choice else: print('不做任何操作') exit() def main(): if is_valid_inputs(): encoding = choice_encoding() filepathset = set() for path in argv[1:]: filepathset.union(filter(lambda s: s.endswith(file_extension), allfileset(path, filepathset))) if filepathset: for path in filepathset: with open(path, 'rb') as f: filebytes = any2any(f.read(), encoding) with open(path, 'wb') as f: f.write(filebytes) print(f'{path} 已轉換到 {encoding}') print('轉換已完成') else: print('沒有任何可以轉換的文件,請檢查程序下是否有.any2any配置文件,用空格或換行間隔要轉換的文件類型,例如 .c .cpp .cs') else: print("未收到任何要轉換的文件或文件夾路徑,或參數錯誤,請把要轉換的文件或文件夾拖動到程序上。") if __name__ == "__main__": try: main() finally: input('按任意鍵退出...')
可以使用pyinstaller打包成可執行文件,帶著走或者分享給其他人用
安裝pyinstaller
conda install pyinstaller
打包Python文件,其中-i
參數可以給.exe文件加上圖標,-F
參數指定要打包的腳本
pyinstaller -i icon.ico -F any2any.py
最后打包好的可執行文件在dict路徑下。
到此,關于“怎么使用Python批量對文本文件編碼互轉”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。