python脚本:搜索目录下的汉字

python脚本:搜索目录下的汉字

# 工具:找出目录下的文件(ts或者js后缀)里所有汉字
# -*- coding: utf-8 -*-
# 命令行:python /Users/liuling/工作/公司/15\ 工具/findChinese.py  /Users/liuling/src /Users/liuling/工作/公司/15\ 工具 True
# 参数说明:
# argv[0]: 脚本,例如/Users/liuling/工作/公司/15\ 工具/findChinese.py,必须有
# argv[1]: 输入目录,要查找中文的文件所在目录(支持嵌套),例如/Users/liuling/src,必须有
# argv[2]: 输出目录,查找结果输出目录,例如/Users/liuling/工作/公司/15\ 工具,最终结果会放在该目录的out.txt文件里,选填
# argv[3]: True:输出结果里只输出中文(默认值);False:输出结果里包括中文&&中文所在的文件名,选填(注意,如果要设置这个参数,则必须argv[2]也有值)

import os,sys,re

list1=[]

def file_name(file_dir,onlyOutputChinese):
    for root,dirs,files in os.walk(file_dir):
        getChineseStrings(root,files,onlyOutputChinese)
        
def getChineseStrings(root,files,onlyOutputChinese):
    for f in files:
        if f.endswith('.ts') or f.endswith('.js'):
            if not onlyOutputChinese:
                print(root+f)
                getNoRepeatList(root+f,list1)

            with open(os.path.join(root,f),encoding='UTF-8') as lines:
                for line in lines:
                    line=str(line)
                    #删除//注释的内容
                    line =re.sub(r'//.*$','',line)
                    #删除行内/**/注释的内容
                    line =re.sub(r'/\*.*\*/','',line)
                    #删除行内/*注释以及其右边的内容
                    line =re.sub(r'/\*.*$','',line)
                    #删除行内*/注释以及其左边的内容
                    line =re.sub(r'.*\*/','',line)
                    #删除*以及后面的字符串
                    line =re.sub(r'\*.*$','',line)
                    #查找“”中间的中文字符串
                    findPart(u"\".*[\u4e00-\u9fa5]+.*\"",line)
                    #删除“”中间的中文字符串
                    line =re.sub(u"\".*[\u4e00-\u9fa5]+.*\"",'',line)
                    #查找‘’中间的中文字符串
                    findPart(u"\'.*[\u4e00-\u9fa5]+.*\'",line)
                    #删除‘’中间的中文字符串
                    line =re.sub(u"\'.*[\u4e00-\u9fa5]+.*\'",'',line)
                    #查找><中间的中文字符串 
                    findPart(u">.*[\u4e00-\u9fa5]+.*<",line)
                    
def findPart(regex,text):
    res=re.findall(regex,text)
    for r in res:
        if '\"' in r:
            result = r.split('\"')
            for i in result:
                if re.compile(u'[\u4e00-\u9fa5]').search(i):
                    print (str(i))
                    getNoRepeatList(str(i),list1)
            return 
        if '\'' in r:
            result = r.split('\'')
            for i in result:
                if re.compile(u'[\u4e00-\u9fa5]').search(i):
                    print (str(i))
                    getNoRepeatList(str(i),list1)
            return 
        if '>' in r or '<' in r :
            result =re.split(r">|<", r) 
            for i in result:
                if re.compile(u'[\u4e00-\u9fa5]').search(i):
                    print (str(i))
                    getNoRepeatList(str(i),list1)
            return 

def getNoRepeatList(i,lists):
    if i not in lists:
        lists.append(i)


if __name__=='__main__':
    if len(sys.argv) < 1:
        print ("失败!入参错误,至少要一个参数:要查找的文件目录")
        exit(1)

    file_dir = sys.argv[1];
    #输出目录路径
    # print ("目录路径:", file_dir)

    if not os.path.exists(file_dir):
        print ("失败!目录路径错误")
        exit(1)
    
    print ("参数长度:", len(sys.argv))
    
    #执行
    if len(sys.argv)>3:
        file_name(file_dir,sys.argv[3])
    else:
        file_name(file_dir,True)
    
    #输出
    if len(sys.argv) < 2:
        #方法1:在terminal再次输出总结果:文件、中文
        print("===== 总结果:=====")
        for i in list1:
            print(i)
    else: 
        #方法2:输出结果到文件
        out_dir = sys.argv[2]
        if not os.path.exists(out_dir):
            os.makedirs(out_dir)

        outfile = out_dir+"/out.txt"
        f = open(outfile, "w")
        if not os.path.exists(outfile):
            print ("失败!输出文件目录创建失败")
            exit(1)

        for i in list1:
            print(i, file = f)
        f.close()
        print("===== 完成结果输出:"+outfile+" =====")

你可能感兴趣的:(python脚本:搜索目录下的汉字)