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+" =====")







网友评论