本文实例讲述了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程序设计有所帮助。