python 检索文件内容工具
公司内部需求一个工具检索目录下的文件在另外的目录中使用次数, 用来优化包体的大小。
此代码效率并不高效, 另添加对应的 后缀检索。 用python 实现比较快速, 另还有缺点是只支持 utf-8 格式内容。
各位用到的可以自己摘一下。
(本人习惯使用c\c++,目前发现这种脚本类的确实实现方便,接口齐全, 我能想到的接口, 真的全都有, 用python 写工具, 应该是一个调试起来还可以的过程)
代码如下:
1 #coding=utf-8 2 3 import os 4 import sys 5 import time 6 7 #private: 8 def checkSuffix(strFileName, strCompareSuffix): 9 strPreFileName = '' 10 strFileSuffix = '' 11 bIsCheckOk = False 12 strArray = strFileName.split('.') 13 if len(strArray) > 1: 14 strPreFileName = strArray[0] 15 strFileSuffix = strArray[1] 16 #print(strFileSuffix) 17 #print(strCompareSuffix) 18 if strCompareSuffix == '*' or strFileSuffix == strCompareSuffix: 19 bIsCheckOk = True 20 return bIsCheckOk, strPreFileName 21 22 def readFileName(file_dir): 23 for root, dirs, files in os.walk(file_dir): 24 return files,dirs, root 25 return '', '', '' 26 27 def findString(pathFile, findKey): 28 #print("open pathFile:", pathFile) 29 fp = open(pathFile, "r", encoding='utf-8') 30 strr = fp.read() 31 if(strr.find(findKey) != -1): 32 return True 33 return False 34 35 def startFind(files, dirs, root, findKey, strSuffix): 36 for fileName in files: 37 try: 38 bIsCheckOk, strPreFileName = checkSuffix(fileName, strSuffix) 39 if bIsCheckOk == False: 40 #print("fileName", fileName, " is not suffx :", strSuffix) 41 continue 42 if(findString(root + "\\" + fileName, findKey)): 43 return True, fileName 44 except Exception as err: 45 continue 46 47 for jj in dirs: 48 fi, di, ro = readFileName(root + jj) 49 bIsFind, fileName = startFind(fi, di, ro, findKey, strSuffix) 50 if(bIsFind == True): 51 return bIsFind, fileName 52 return False, '' 53 54 #public: 55 def findUse(dirPath, findKey, strSuffix): 56 files, dirs, root = readFileName(dirPath) 57 return startFind(files, dirs, root, findKey, strSuffix) 58 59 def getDirsFiles(dirPath): 60 dirfiles = []; 61 for root, dirs, files in os.walk(dirPath): 62 dirfiles += files; 63 return dirfiles 64 65 def writeResult(strFileName, strWriteSign, list): 66 fp = open(strFileName, 'a+') 67 fp.write(strWriteSign) 68 #fp.writelines(list) 69 for str in list: 70 fp.write(str) 71 fp.write('\n') 72 fp.close() 73 74 if __name__ == '__main__': 75 """ 76 findDir = u"E:\\mmo2018001\\artist\\open\\ui\\free\\" 77 findAimDir = u"E:\\mmo2018001\\artist\\open\\effect\\" 78 findsuffix = "prefab" # 哪些要搜索的文件的后缀 79 findAimsuffix = "*" # 搜索那些后缀的文件 80 """ 81 bt = time.clock() # 记录时间 82 83 findDir = sys.argv[1] 84 findAimDir = sys.argv[2] 85 findsuffix = sys.argv[3] 86 findAimsuffix = sys.argv[4] 87 88 thisPath = os.getcwd() 89 print("this path is ", thisPath) 90 print(findDir) 91 print(findAimDir) 92 print(findsuffix) 93 print(findAimsuffix) 94 95 dirFiles = getDirsFiles(findAimDir) 96 useFiles = [] 97 notUseFiles = [] 98 nLen = len(dirFiles) 99 i = 0 100 for filesName in dirFiles : 101 102 bIsCheckOk, strPreFileName = checkSuffix(filesName, findsuffix) 103 if bIsCheckOk == True: 104 isFind, fileName = findUse(findDir, strPreFileName, findAimsuffix) 105 #print("filesName:\t", filesName, " \nIsFind:\t\t", isFind) 106 if(isFind): 107 useFiles.append(filesName) 108 else: 109 notUseFiles.append(filesName) 110 i += 1 111 p = round(i * 100 / nLen) 112 duration = round(time.clock() - bt, 2) 113 remaining = round(duration * 100 / (0.01 + p) - duration, 2) 114 print("进度:{0}%,已耗时:{1}s,预计剩余时间:{2}s".format(p, duration, remaining), end="\r") 115 116 writePath = thisPath + "\\Result.txt" 117 try: 118 os.remove(writePath) 119 except Exception as err: 120 print(err) 121 writeResult(writePath, "***************NotUseFiles:***************\n", notUseFiles) 122 writeResult(writePath, "***************UseFiles:***************\n", useFiles) 123 useTime = time.clock() - bt 124 print("已完成 总耗时:", useTime)