Python模拟Linux/Mac OS工具grep和Windows工具findstr

在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值