Python实现文件编码批量转换

本文介绍了一个Python脚本,用于批量修改指定目录及子目录下所有特定类型的文件编码。用户只需提供目录路径、目标编码格式和文件扩展名,脚本即可实现便捷转换。为了方便使用,建议将脚本打包并添加到环境变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

突然翻出了之前写的一份代码,适用于批量修改一个目录及其子目录下所有指定类型的文件编码。使用了python的chardetcodecs库。

# -*- coding: utf-8 -*-
import os, chardet, codecs, re
#文件类型扩展名  文件列表
FileType, FileList = [], []

def get_file_list(Dir):
""" 获取指定目录下所有指定类型文件
"""
	if len(Dir.strip(' ')) == 0:
		return 
	dirList = [os.path.join(Dir, f) for f in os.listdir(Dir)]
	fileList = [f for f in dirList if os.path.isfile(f) and os.path.splitext(f)[1] in FileType]
	folderList = [f for f in dirList if os.path.isdir(f)]
	FileList.extend(fileList)
	# 递归字文件夹
	for subfolder in folderList:
		get_file_list(subfolder)
	

def convert_2_target_coding(coding='utf-8'):
""" 转换成目标编码格式
"""
    for filepath in FileList:
        with open(filepath, 'rb') as f:
    	    data = f.read()
    	    codeType = chardet.detect(data)['encoding']

        if codeType not in (coding, 'ascii'):
            with codecs.open(filepath, 'r', codeType) as f:
                content = f.read()
            with codecs.open(filepath, 'w', coding) as f:
                f.write(content)
            print(filepath + '\n')

    		
if __name__ == '__main__':
	# 获取目录
	WorkDir = str(input('input target folder\n\t:'))
	# 目标编码格式
	TargetCoding = str(input('target coding(default to utf-8)\n\t:')).lower()
	# 文件类型扩展名
	FileType = re.split(r'\s+', str(input('file type(filename extension, such as .c .h)\n\t:')))
	os.chdir(WorkDir)
	get_file_list(WorkDir)
	convert_2_target_coding(TargetCoding)

使用方法:

  1. 直接启动脚本,按照提示,第一步输入目标目录的据对路径(Windows下直接拖拽到控制台);第二步输入目标编码格式,比如utf-8或者gb2312什么的;第三步输入目标类型文件扩展名,如果有多个就用空格隔开,例如.py .cpp .h
  2. 如果要经常用的话建议拿pyinstaller打包一下,添加到环境变量里面~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值