Python 根据文件名关键字模糊匹配到文件,下一步如何拿到文件的绝对路径呢

Wink · 2023年12月22日 · 最后由 849977861 回复于 2023年12月28日 · 6048 次阅读
def find_file_by_key(path: str, key: str):
    """
    遍历目录模糊匹配文件
    :param path: 公盘路径
    :param key: 搜索关键字
    :return:
    """
    for root, dirs, files in os.walk(path):
          for f in files:
              if fnmatch.fnmatch(f, '*' + key + '.pdf'):
                  return f

我是这样匹配的,但是文件路径不知道怎么拿。请大佬指教,或者有没有别的实现方案
😅 😅 😅

共收到 5 条回复 时间 点赞

f_dir = os.sep.join[root, files]

import os 
import fnmatch

def find_files_key(keyWord, dicretory='.'):
  matching_files = []


  for root,dirs,files in os.walk(dicretory):
    for file in files:
      if fnmatch.fnmatchcase(file, keyWord):                 # 不区分大小写用fnmatch
        file_path = os.path.abspath(os.path.join(root,file))
        matching_files.append(file_path)

  return matching_files 


#test
keyword = "1.py"
directory_to_search = "./"  
result = find_files_key(keyword, directory_to_search)
if result:
    print("匹配到的文件:")
    for file_path in result:
        print(file_path)
else:
    print(f"未找到包含关键字 '{keyword}' 的文件。")

os.path.abspath(path) 该方法返回指定路径的绝对路径

在你的代码中,你已经找到了匹配的文件名,但是没有返回文件的绝对路径。要获取文件的绝对路径,你可以简单地将找到的文件名与当前目录(root)合并使用 os.path.join() 方法:

import os
import fnmatch

def find_file_by_key(path: str, key: str):
    """
    遍历目录模糊匹配文件并返回其绝对路径
    :param path: 公盘路径
    :param key: 搜索关键字
    :return: 文件的绝对路径或者 None 如果没有找到匹配的文件
    """
    for root, dirs, files in os.walk(path):
        for f in files:
            if fnmatch.fnmatch(f, '*' + key + '.pdf'):
                return os.path.join(root, f)  # 返回找到的文件的绝对路径
    return None  # 如果没有找到匹配的文件,返回 None

这个修改后的函数会返回第一个匹配到的文件的绝对路径。如果你想要返回所有匹配的文件的绝对路径,你可以将它们存储在一个列表中并返回该列表:

import os
import fnmatch

def find_file_by_key(path: str, key: str):
    """
    遍历目录模糊匹配文件并返回其绝对路径列表
    :param path: 公盘路径
    :param key: 搜索关键字
    :return: 包含匹配文件绝对路径的列表 或者 空列表 如果没有找到匹配的文件
    """
    matching_files = []
    for root, dirs, files in os.walk(path):
        for f in files:
            if fnmatch.fnmatch(f, '*' + key + '.pdf'):
                matching_files.append(os.path.join(root, f))  # 添加找到的文件的绝对路径到列表中
    return matching_files  # 返回包含所有匹配文件绝对路径的列表
5楼 已删除
import os
import fnmatch

def find_file_by_key(path: str, key: str):
    """
    遍历目录模糊匹配文件
    :param path: 公盘路径
    :param key: 搜索关键字
    :return: 文件的绝对路径
    """
for root, dirs, files in os.walk(path):
    for f in files:
        if fnmatch.fnmatch(f, '*' + key + '.pdf'):
            abs_path = os.path.abspath(os.path.join(root, f))
            return abs_path
```py

使用os.path.join(root, f)来获取文件的绝对路径,然后返回。这样就可以找到文件的绝对路径了
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册