在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)
本程序需要在命令提示符环境中运行,某次运行截图如下: