在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)
本程序需要在命令提示符环境中运行,某次运行截图如下:
---------我是分割线----------
重要通知:
1、新书《Python程序设计开发宝典》全面上架,可在亚马逊、京东、当当、互动出版物购买。另外,清华大学出版社与赣江图书专营联合推出超低价优惠,原价69元,优惠活动期间39.8元。优惠活动详情(特别说明:本书已出现盗版书籍并已有读者朋友上当,请大家尽量通过正规渠道购买,在购买时一定要仔细辨认并和商家提前沟通):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-14464369246.84.46f16db0roWfX4&id=557107249812&rn=339cbc9df2bac424664103917dedfbd2&abbucket=8&tbpm=3
2、新书《Python程序设计开发宝典》第一次转发积攒活动已结束,将于2日内公布中奖名单,届时中奖的朋友再通过公众号消息告知详细收件地址和电话,出版社统一发货。详情:《Python程序设计开发宝典》全面上架(新书超低价优惠+转发积攒送书)
3、CSDN课程“Python可以这样学(第三季:多线程与多进程编程)”于2017年8月23日8:00——18:00之间执行优惠价3元,15课时,3小时44分钟,原价39元,活动期间优惠价3元。详情:http://edu.csdn.net/course/detail/4803