在Linux和Mac OS系统中有个工具grep可以用来查找哪些文件中包含特定的字符串,Windows系统中也有类似的工具findstr,本文代码模拟了这两个工具的工作原理。
from os import listdir from sys import argv
def prepare(fileNames): for item in fileNames: # 把类似于*.txt之类的文件名替换成真实文件名 # 不考虑类似于abc*.py的文件名 if '*' in item: index = item.index('.') fileNames.remove(item) temp = [fn for fn in listdir()\ if fn.endswith(item[index:])] fileNames.extend(temp) def main(desStr, fileNames): result = [] for filename in fileNames: try: # 使用UTF8编码打开文本文件 # 可以根据需要进行改写或扩充 with open(filename, encoding='utf8') as fp: for line in fp: if desStr in line: result.append(filename) break except: pass return result
# 要查找的字符串 desStr = argv[1] # 要查找的全部文件 fileNames = argv[2:]
# 预处理 prepare(fileNames)
# 进行查找并输出结果 result = main(desStr, fileNames) for item in result: print(item)
本程序需要在命令提示符环境中运行,某次运行截图如下: