首先import os,sys

import os,sys  11

定义一个函数

def convert( filename, in_enc = "UTF8", out_enc="GBK" ):`11

第一个参数是需要装换的文件名,第二个是源文件的原编码,第三个是需要转为目标编码。第二个、第三个参数都有默认值。

def convert( filename, in_enc = "UTF8", out_enc="GBK" ):  
    try:  
        print "convert " + filename,        
        #读取文件内容 
        content = open(filename).read() 
        #将原文件内容进行编码得到新文件内容
        new_content = content.decode(in_enc).encode(out_enc) 
        #打开文件将新文件内容写进去 
        open(filename, 'w').write(new_content)  
        print " done"  
    except:  
        print " error"123456789101112123456789101112

以上这个方法针对的文件名,但如果只输入了目录,又要查找目录下的所有文件,所以就再定义一个方法。

def explore(dir): #遍历目录的所有文件 并将根目录 存在变量root中,目录名存于dirs中,文件名存于files中
    for root, dirs, files in os.walk(dir):  
    #再次遍历所有文件名files
        for file in files:  
        #将文件名与根目录进行拼接  形成绝对路径
            path = os.path.join(root, file)  
            #调用上面编码转换函数
            convert(path)123456789123456789

最后在main函数中判断是否输入的是文件名还是目录

def main():#获取命令行的第一个参数  
    for path in sys.argv[1:]:  
    #如果是文件 则调用单个文件编码转换
        if os.path.isfile(path):  
            convert(path) 
            #否则就调用 explore方法
        elif os.path.isdir(path):  
            explore(path)123456789123456789

完整源码如下:

import os,sys  

def convert( filename, in_enc = "UTF8", out_enc="GBK" ):  
    try:  
        print "convert " + filename,  
        content = open(filename).read()  
        new_content = content.decode(in_enc).encode(out_enc)  
        open(filename, 'w').write(new_content)  
        print " done"  
    except:  
        print " error"  def explore(dir):  
    for root, dirs, files in os.walk(dir):  
        for file in files:  
            path = os.path.join(root, file)  
            convert(path)  

def main():  
    for path in sys.argv[1:]:  
        if os.path.isfile(path):  
            convert(path)  
        elif os.path.isdir(path):  
            explore(path)  

if __name__ == "__main__":  
    main()