在python中查找文件

新手上路,请多包涵

我有一个文件可能位于每个用户机器上的不同位置。有没有办法实现对文件的搜索?一种可以传递文件名和目录树进行搜索的方法?

原文由 directedition 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 397
2 个回答

os.walk 是答案,这将找到第一个匹配项:

 import os

def find(name, path):
    for root, dirs, files in os.walk(path):
        if name in files:
            return os.path.join(root, name)

这将找到所有匹配项:

 def find_all(name, path):
    result = []
    for root, dirs, files in os.walk(path):
        if name in files:
            result.append(os.path.join(root, name))
    return result

这将匹配一个模式:

 import os, fnmatch
def find(pattern, path):
    result = []
    for root, dirs, files in os.walk(path):
        for name in files:
            if fnmatch.fnmatch(name, pattern):
                result.append(os.path.join(root, name))
    return result

find('*.txt', '/path/to/dir')

原文由 Nadia Alramli 发布,翻译遵循 CC BY-SA 2.5 许可协议

在 Python 3.4 或更新版本中,您可以使用 pathlib 进行递归 globbing:

 >>> import pathlib
>>> sorted(pathlib.Path('.').glob('**/*.py'))
[PosixPath('build/lib/pathlib.py'),
 PosixPath('docs/conf.py'),
 PosixPath('pathlib.py'),
 PosixPath('setup.py'),
 PosixPath('test_pathlib.py')]

参考: https ://docs.python.org/3/library/pathlib.html#pathlib.Path.glob

在 Python 3.5 或更新版本中,您还可以像这样进行递归通配:

 >>> import glob
>>> glob.glob('**/*.txt', recursive=True)
['2.txt', 'sub/3.txt']

参考: https ://docs.python.org/3/library/glob.html#glob.glob

原文由 Kenyon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏