批量转换文件编码

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

import os
import shutil


def match(config,fullpath,type):
	flag=False
	if type == 'exclude':
		for item in config['src']['exclude']:
			if fullpath.startswith(config['src']['path']+os.path.sep+item):
				flag=True
				break

	if type=='filter':
		for item in config['src']['filter']:
			if fullpath.endswith(item):
				flag=True
				break
	return flag



def conver_file(param):
    for root, dirs, files in os.walk(param['src']['path']):
        for filename in files:
            readfile=root+os.path.sep+"%s" %filename
            print(readfile)
            if 'filter' in param['src']:
                if not (match(param,readfile,'filter')):
                    continue
            s=''
            outfile=readfile.replace(param['src']['path'],param['dest']['path'])
            try :
                s=open(readfile,encoding=param['src']['encoding']).read()
            except:
                print("file %s  read erro" % readfile)
                shutil.copy(readfile,outfile)
            if  s: #False and
                print("save")
                with open(outfile, mode='w', encoding=param['dest']['encoding']) as a_file:
                    a_file.write(s)

        for dirname in dirs:
            file=root+os.path.sep+"%s" %dirname
            if 'exclude' in param['src']:
                if(match(param,file,'exclude')):
                    continue
            outdir=file.replace(param['src']['path'],param['dest']['path'])
            #print(outdir)
            if not os.path.isdir(outdir):
                os.mkdir(outdir)
if __name__ == "__main__":
    param={'src':{'path':r'D:\work\test\trunk','encoding':'gbk','exclude':['dataa'],'filter':['.php','.html','.htm']},
        'dest':{'path':"f:\\test\\new",'encoding':'utf-8'}}
    conver_file(param)