Python实现批量转换文件编码的方法

1112次阅读  |  发布于5年以前

本文实例讲述了Python实现批量转换文件编码的方法。分享给大家供大家参考。具体如下:

这里将某个目录下的所有文件从一种编码转换为另一种编码,然后保存


    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)

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8