# -*- coding: utf-8 -*-
import os
import shutil
import re
import sys
'''

功能:将一个文件夹中的指定类型的文件从gb2312或gbk转换成utf-8类型。

遍历一个文件夹下所有文件,从src中取出处理后放入ddn中,src中的不变。

指定src和ddn就可以了,还可以改文件处理部分完成别的功能

'''
src=os.getcwd()+'\\'+'!wwwroot'
ddn=os.getcwd()+'\\'+'www'
#####################################
def search(root,handler):
global ddn
list=os.listdir(root)
for f in list:
cf=root+'\\'+f
if os.path.isdir(cf):
search(cf,handler)
else:
handler(cf,ddn)#the function dealing with file
##########################################################
def copy(sfn,ddn):
global src
ddn=ddn+os.path.dirname(sfn).replace(src,'')
def copymain():#main code of copy function
fn=os.path.basename (sfn)
if re.search ('php',fn,re.I):#转换php后缀的文件,不严格检查
sf=open(sfn,'r')
s=sf.read()
try:#针对网页类型的文件的处理部分
if re.search(r'charset=gb2312',s,re.I):#gb2312类型的进行转换
print 'gb2312: ',sfn
s=re.sub('charset=gb2312','charset=utf-8',s)
s=s.decode('gbk')
df=open(ddn+'\\'+os.path.basename(sfn),'w')
df.write(s.encode('utf-8'))
df.flush()
sf.close()
df.close()
elif re.search(r'charset=utf-8',s,re.I):#utf-8类型直接复制
print 'utf-8: ',sfn
sf.close()
shutil.copy2(sfn,ddn)
else:#不知道类型的按gb2312转换成utf-8类型
s=s.decode('gbk')
df=open(ddn+'\\'+os.path.basename(sfn),'w')
df.write(s.encode('utf-8'))
df.flush()
sf.close()
df.close()
print '*** ',sfn
except:
sf.close
print sfn
sys.exit()
else:#非指定类型文件,直接复制
shutil.copy2(sfn,ddn)
if os.path.exists (ddn):
copymain()
#'''
else:#directory not exist,create it
os.makedirs (ddn)
copymain()
#'''
search(src,copy)