文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何用python写一个简单的find命

2023-01-31 02:46

关注

    对一个运维来说可能会经常去查找目录下的一些文件是否存在,最常用的就是find命令,它不仅可以查找文件也可以查找目录,find命令用法

查找文件

[root@node1 opt]# find /usr/ -type f -name df

/usr/bin/df

查找目录

[root@node1 opt]# find /usr/ -type d -name python

/usr/share/gcc-4.8.2/python

    现在就讲一些如何用python实现这个简单功能,这里先将一下python os.walk函数的用法

首先 通过walk函数获取指定目录下的所有文件和目录,walk默认返回一个列表里面分别是

(“父目录”,“当前目录下的目录”,当前目录下的文件)下面实例:

[root@-node1 tmp]# mkdir -p /tmp/project/code/
[root@-node1 tmp]# mkdir -p /tmp/project/docs
[root@-node1 tmp]# touch /tmp/project/docs/readme.md
In [23]:  import os
 
In [24]: res=os.wa
os.wait     os.wait3    os.wait4    os.waitpid  os.walk    
 
In [24]: res=os.walk('/tmp/project')
 
In [25]: print res
<generator object walk at 0x28989b0>
 
In [26]: for i in res:
   ....:     print i
   ....:    
('/tmp/project', ['code', 'docs'], [])
('/tmp/project/code', [], [])
('/tmp/project/docs', [], ['readme.md'])


现在来实现一个文件查找函数把

首先大家查找文件有两种情况:知道完整文件名,知道文件名部分。

在这个函数里面需要你输入两个必要参数就是查找文件的目录,查找文件名,剩下一个非必要参数是否使用模糊搜索(在不知道全部文件名的时候会用到)。

下面的逻辑是使用os.walk获取到指定目录下的tree信息,如果当前目录下的文件有名字与输入名字相同的请输出文件路径和名称

[root@node1 opt]# cat pro1.py 
def find_f(dir,word,use_like=False):
    res=os.walk(dir)
    for tree_list in res:
        for file_name in tree_list[2]:
            if use_like == False:
                if word == file_name:
                    print "{path}/{file}".format(path=tree_list[0],file=file_name)
            else:
                if word in file_name:
                    print "{path}/{file}".format(path=tree_list[0],file=file_name)
find_f("/usr","ls")
[root@node1 opt]# python pro1.py 
/usr/bin/ls


当然你也可以同样使用这个逻辑查找目录

def find_d(dir,word,use_like=False):
    res=os.walk(dir)
    for tree_list in res:
        for dir_name in tree_list[1]:
            if use_like == False:
                if word == dir_name:
                    print "{path}/{dir}".format(path=tree_list[0],dir=dir_name)
            else:
                if word in dir_name:
                    print "{path}/{dir}".format(path=tree_list[0],dir=dir_name)
find_d("/usr/","python")


现在你可以感觉写两段代码有点麻烦,想要精简一下,这样就实现了简单的find功能

def find(dir,word,type='f',use_like=False):
    res=os.walk(dir)
    for tree_list in res:
        if type == "f":
            mt=2
        elif type == "d":
            mt=1
        else:
            print "This type %s is noexist" % type
        for name in tree_list[mt]:
            if use_like == False:
                if word == name:
                    print "{path}/{name}".format(path=tree_list[0],name=name)
            else:
                if word in name:
                    print "{path}/{name}".format(path=tree_list[0],name=name)
find('/usr','ls')


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯