最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python批量對(duì)文本文件編碼互轉(zhuǎn)的方法

 更新時(shí)間:2023年03月24日 15:51:04   作者:Biem  
這篇文章主要介紹了使用Python批量對(duì)文本文件編碼互轉(zhuǎn)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在Windows下寫C語言默認(rèn)是GB2312,放到Linux上就會(huì)亂碼,因?yàn)長(zhǎng)inux和MacOS默認(rèn)是UTF-8,因此寫了個(gè)Python小腳本對(duì)指定路徑下的文件進(jìn)行轉(zhuǎn)換。

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"將轉(zhuǎn)換 {' '.join(list(file_extension))}")


def bytes_encoding(b: bytes, length: int = 1024) -> str:
    '''
    返回探測(cè)到的編碼格式
    '''
    return detect(b[:length])['encoding']


def any2any(b: bytes, encoding: str) -> bytes:
    '''
    任意編碼字節(jié)轉(zhuǎn)換為任意編碼字節(jié)

    探測(cè)輸入的字節(jié)編碼格式,轉(zhuǎn)換為指定編碼,并返回對(duì)應(yīng)字節(jié)
    '''
    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:
    '''
    遞歸路徑下所有文件,返回絕對(duì)路徑集合
    '''
    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:
    '''
    檢查參數(shù)是否輸入正確
    '''
    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('''!??!在轉(zhuǎn)換前注意備份文件?。?!
要轉(zhuǎn)換到什么編碼?
1. GB18030(Windows下常用,C語言不會(huì)亂碼)
2. UTF-8(非Windows下通用,例如Linux和macOS)
3. 其他
> ''')
    if choice == '1':
        return 'GB18030'
    elif choice == '2':
        return 'UTF-8'
    elif choice == '3':
        choice = input('輸入你想轉(zhuǎn)換到的編碼:')
        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} 已轉(zhuǎn)換到 {encoding}')
            print('轉(zhuǎn)換已完成')
        else:
            print('沒有任何可以轉(zhuǎn)換的文件,請(qǐng)檢查程序下是否有.any2any配置文件,用空格或換行間隔要轉(zhuǎn)換的文件類型,例如 .c .cpp .cs')
    else:
        print("未收到任何要轉(zhuǎn)換的文件或文件夾路徑,或參數(shù)錯(cuò)誤,請(qǐng)把要轉(zhuǎn)換的文件或文件夾拖動(dòng)到程序上。")

if __name__ == "__main__":
    try:
        main()
    finally:
        input('按任意鍵退出...')

可以使用pyinstaller打包成可執(zhí)行文件,帶著走或者分享給其他人用

安裝pyinstaller

conda install pyinstaller

打包Python文件,其中-i參數(shù)可以給.exe文件加上圖標(biāo),-F參數(shù)指定要打包的腳本

pyinstaller -i icon.ico -F any2any.py

最后打包好的可執(zhí)行文件在dict路徑下

到此這篇關(guān)于使用Python批量對(duì)文本文件編碼互轉(zhuǎn)的方法的文章就介紹到這了,更多相關(guān)Python批量轉(zhuǎn)換文本文件編碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用sklearn之LabelEncoder將Label標(biāo)準(zhǔn)化的方法

    使用sklearn之LabelEncoder將Label標(biāo)準(zhǔn)化的方法

    今天小編就為大家分享一篇使用sklearn之LabelEncoder將Label標(biāo)準(zhǔn)化的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python 格式化打印json數(shù)據(jù)方法(展開狀態(tài))

    Python 格式化打印json數(shù)據(jù)方法(展開狀態(tài))

    今天小編就為大家分享一篇Python 格式化打印json數(shù)據(jù)方法(展開狀態(tài)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python中的ceil()方法使用教程

    Python中的ceil()方法使用教程

    這篇文章主要介紹了Python中的ceil()方法使用教程,是Python入門中必會(huì)的方法之一,需要的朋友可以參考下
    2015-05-05
  • python實(shí)現(xiàn)畫桃心表白

    python實(shí)現(xiàn)畫桃心表白

    這篇文章主要介紹了python實(shí)現(xiàn)畫桃心表白的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳解python網(wǎng)絡(luò)進(jìn)程

    詳解python網(wǎng)絡(luò)進(jìn)程

    進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它是操作系統(tǒng)動(dòng)態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進(jìn)程既是基本的分配單元,也是基本的執(zhí)行單元。本文將介紹python實(shí)現(xiàn)網(wǎng)絡(luò)進(jìn)程
    2021-06-06
  • 使用Python的PIL模塊來進(jìn)行圖片對(duì)比

    使用Python的PIL模塊來進(jìn)行圖片對(duì)比

    這篇文章主要介紹了使用Python的PIL模塊來進(jìn)行圖片對(duì)比的方法,搜索引擎最基本的圖片搜索也是利用圖片顏色值的對(duì)比來實(shí)現(xiàn)的,需要的朋友可以參考下
    2016-02-02
  • pandas.concat實(shí)現(xiàn)DataFrame豎著拼接、橫著拼接方式

    pandas.concat實(shí)現(xiàn)DataFrame豎著拼接、橫著拼接方式

    這篇文章主要介紹了pandas.concat實(shí)現(xiàn)DataFrame豎著拼接、橫著拼接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • HTTPX入門使用教程

    HTTPX入門使用教程

    HTTPX是一款Python棧HTTP客戶端庫,它提供了比標(biāo)準(zhǔn)庫更高級(jí)別、更先進(jìn)的功能,如連接重用、連接池、超時(shí)控制、自動(dòng)繁衍請(qǐng)求,下面通過本文介紹HTTPX入門知識(shí)和基本用法,感興趣的朋友一起看看吧
    2023-12-12
  • Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表詳解

    Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,詳細(xì)分析了鏈表的概念、定義及Python實(shí)現(xiàn)與使用鏈表的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • python利用pytesseract 實(shí)現(xiàn)本地識(shí)別圖片文字

    python利用pytesseract 實(shí)現(xiàn)本地識(shí)別圖片文字

    這篇文章主要介紹了python利用pytesseract 實(shí)現(xiàn)本地識(shí)別圖片文字,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論

江口县| 科技| 抚松县| 克东县| 三门峡市| 崇礼县| 廉江市| 萨嘎县| 福建省| 临湘市| 红原县| 迭部县| 南宫市| 尉氏县| 池州市| 玛多县| 山阴县| 涡阳县| 瑞安市| 巫溪县| 铜川市| 黎平县| 即墨市| 博罗县| 平远县| 土默特左旗| 长岛县| 手游| 法库县| 康保县| 九龙县| 西充县| 临沭县| 公主岭市| 永昌县| 泌阳县| 北安市| 随州市| 临邑县| 台中县| 楚雄市|