Discuss / Python / 查找文件名包含指定字符串的文件,并打印出相对路径。

查找文件名包含指定字符串的文件,并打印出相对路径。

Topic source

ywjco_567

#1 Created at ... [Delete] [Delete and Lock User]
# !/usr/bin/python3
# -*-coding:UTF-8-*-
# FileName: os_searchBykey.py

import os

def search_key(dir, key):
    '''
        在当前目录以及当前目录的所有子目录下,
        查找文件名包含指定字符串的文件,并打印出相对路径。
    '''
    path_file = ''
    if dir == None or dir == '.':
        dir = os.getcwd()
    if key =='': return 0
    try:
        for root, dirs, files in os.walk(dir, topdown=True, onerror=OSError(FileNotFoundError)):
            # onerror=OSError(FileNotFoundError):当所请求的文件或目录不存在时将被引发
            for name in files:
                if key in name:         # 查找文件名包含指定的关键字
                    path_file = os.path.join(root, name)
                    yield os.path.relpath(path_file)    # relpath(path, start=os.curdir),返回相对路径
    except Exception as e:
        print(f'输入目录参数dir是: “{dir}”, 输入文件类型参数key是: “{key}”')
        print(f'输入错误:“{e.__context__}”,请核对后再次运行程序。')

def main():
    _dir = str(input("请输入要查找文件的路径,如果直接回车则查找当前路径:"))
    _ext = str(input("请输入要查找文件句的字符串(例如‘str’),如果直接回车退出:"))
    # _dir = r'D:\Python37\Code'
    # _ext = 'str'
    for s in search_key(_dir, _ext):
        print(s)

if __name__ == '__main__':
    main()

ywjco_567

#2 Created at ... [Delete] [Delete and Lock User]

运行结果:

D:\Python37\python.exe D:/Python37/Code/os_searchBykey.py
请输入要查找文件的路径,如果直接回车则查找当前路径:D:\下载\Python
请输入要查找文件句的字符串(例如‘str’),如果直接回车退出:stat
..\..\下载\Python\C stat函数的用法举例(转载) - 生信小码农 - 博客园.htm
..\..\下载\Python\stat --- Interpreting stat() results — Python 3.7.3 文档.htm
..\..\下载\Python\stat函数讲解.docx

这个文件夹共有“18,374 个文件,1,809 个文件夹”(win属性),数秒完成查找。

所以说,os.walk才是文件查找的***神器***。


  • 1

Reply