ITEEDU

文件编码转换 python程序

站长原创,版权所有ITEEDU,2010-5-8

从gb2312转换到utf-8。做网站时突然觉行用utf-8编码好点,就写了一小段把网站全转了。呵呵。

# -*- coding: utf-8 -*-
import os
import shutil
import re
import sys
'''
www.iteedu.com IT E 教育
功能:将一个文件夹中的指定类型的文件从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)

下载源文件