首先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()
本文转自lzwxx 51CTO博客,原文链接:http://blog.51cto.com/13064681/1943359