文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用Python批量对文本文件编码互转

2023-07-05 16:02

关注

本文小编为大家详细介绍“如何使用Python批量对文本文件编码互转”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用Python批量对文本文件编码互转”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

在Windows下写C语言默认是GB2312,放到Linux上就会乱码,因为Linux和MacOS默认是UTF-8,因此写了个Python小脚本对指定路径下的文件进行转换。

from sys import argvimport osfrom chardet import detectfrom codecs import lookupCONFIG_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 filepathsetdef 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 Falsedef 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批量对文本文件编码互转”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯