首页 > 解决方案 > 如何使用 Tkinter 在 Python 中使用系统中的文件夹名称获取文件夹路径

问题描述

我想通过使用 python 搜索特定文件夹名称来获取完整的文件夹路径

输入

示例输入文件夹名称:Myfile_data

我想在整个系统中搜索文件夹名称并获取特定文件夹的位置

预期输出

示例完整文件夹路径:C:\Users\DELL\Documents\Myfile_data

请帮忙解决这个问题。

先感谢您

标签: python-3.xtkinter

解决方案


这会在整个操作系统中搜索文件或目录。

import os, re

def find_files(filename, search_path, files_or_dirs='files', is_regex=False):
  result = []

  # Walking top-down from the root
  for root, dirs, files in os.walk(search_path):
    if files_or_dirs == 'files':
      for file in files:
        if re.search(filename, file) if is_regex else file == filename:
          result.append(os.path.join(root, file))
    else:
      for dir in dirs:
        if re.search(filename, dir) if is_regex else dir == filename:
          result.append(os.path.join(root, dir))

  return result

要使用它,只需执行以下操作:

results = find_files('file.txt', 'C:\\', 'files')
print(results)

# will print something like
# ['C:\example\file.txt', ...]

要搜索目录而不是文件,请执行以下操作:

results = find_files('mydir', 'C:\\', 'dirs')
print(results)

# will print something like
# ['C:\example\mydir\', ...]

要使用正则表达式搜索文件,请执行以下操作:

results = find_files(r'.+\.txt', 'C:\\', 'files', is_regex=True)
print(results)

# will print something like
# ['C:\example\file.txt', 'C:\Users\DELL\example.txt', ...]

这会在整个操作系统中搜索文件或目录,但会返回一个生成器,这基本上意味着您可以在for ... in ...循环中使用它来获取实时结果,而无需等待搜索完成。

def find_files_gen(filename, search_path, files_or_dirs='files'):
  # Walking top-down from the root
  for root, dirs, files in os.walk(search_path):
    if files_or_dirs == 'files':
      for file in files:
        if file == filename:
          yield os.path.join(root, file)
    else:
      for dir in dirs:
        if dir == filename:
          yield os.path.join(root, dir)

要使用此方法,如下所示:

for result in find_files_gen('file.txt', 'C:\\', 'files'): # or 'dirs'
    print(result)

推荐阅读