0

0

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

WBOY

WBOY

发布时间:2023-04-18 12:43:04

|

1604人浏览过

|

来源于亿速云

转载

在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参数指定要打包的脚本

maven使用方法 中文WORD版
maven使用方法 中文WORD版

本文档主要讲述的是maven使用方法;Maven是基于项目对象模型的(pom),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven将你的注意力从昨夜基层转移到项目管理层。Maven项目已经能够知道 如何构建和捆绑代码,运行测试,生成文档并宿主项目网页。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载
pyinstaller -i icon.ico -F any2any.py

最后打包好的可执行文件在dict路径下。

立即学习Python免费学习笔记(深入)”;

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号