最近在学习redis的源码,从网上下载了一份大神注释好的代码,但是文件编码格式是utf-8的使用sourcesight打开会出现乱码,sourceinsight不支持utf-8格式,网上找了一下,说需要安装插件解决,今天主要目的不是整sourceinsight,主要最近在学python,想练练手
因为是python新手,记录一下主要用到的模块和函数,加深印象
使用模块:os ,sys,codec,chardet
使用函数
sys.argv:用来获取命令行参数,sys.argv[0]标识代码本身路径
os.path :实现了操作路径的常用函数
os.path.isfile:判断是否为文件
os.path.isdir:判断是否为目录
os.walk:遍历目录树,返回一个三元组(root,dirs,files)
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个list,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是list,内容是该文件夹中的所有文件(不包括子目录)
这个函数感觉有点不好理解,发现了一个大神的文章,写的特别详细,贴上链接:
http://www.cnblogs.com/herbert/archive/2013/01/07/2848892.html
os.path.join:合并了多个路径并返回
codecs.open:打开文件时将文件转换成Unicode编码,杜绝乱码,返回文件句柄
文件句柄.read:读取文件内容,文件内容从返回值返回
文件句柄.write:写文件
chardet.detect:识别文件的编码格式,返回一个字典
confidence:返回的编码格式的可能性
encoding:编码格式
OK,贴代码
# -*- coding: utf-8 -*- ''' This file is order to covert file code format batch process ''' import os import sys import codecs import chardet def GetFileExtension(file): (filepath, filename) = os.path.split(file) (shortname, extension) = os.path.splitext(filename) return extension def GetFileEncodingFormat(file): fileHandle = open(file, 'r', errors = 'ignore') fileContext = fileHandle.read() return chardet.detect(fileContext.encode())["encoding"] def CovertFileCodeFormat(file, out_encode): try: encoding = GetFileEncodingFormat(file) extension = GetFileExtension(file) if (encoding != out_encode and (extension == '.c' or extension == '.h')): fileHandle = codecs.open(file, 'r', encoding, errors = 'ignore') fileContext = fileHandle.read() codecs.open(file, 'w', out_encode, errors = 'ignore').write(fileContext) print ("convert:" + file + " sucess") except IOError as err: print ("I/O error: {0}".format(err)) def ProcessDir(dir): for root, dirs, files in os.walk(dir): for file in files: filePath = os.path.join(root, file) CovertFileCodeFormat(filePath, sys.argv[2]) def main(): path = sys.argv[1] if (os.path.isfile(path)): CovertFileCodeFormat(path, sys.argv[2]) elif (os.path.isdir(path)): ProcessDir(path) if __name__ == '__main__': main()