从目录树中获取任意文件

时间:2012-04-24 18:54:09

标签: python file operating-system directory performance

我想获得一个指向目录树中某处的任意文本文件(带有 .txt 后缀)的路径。该文件不应隐藏或隐藏在目录中。

我试着编写代码,但看起来很麻烦。你会如何改进它以避免无用的步骤?

def getSomeTextFile(rootDir):
  """Get the path to arbitrary text file under the rootDir"""
  for root, dirs, files in os.walk(rootDir):
    for f in files:
      path = os.path.join(root, f)                                        
      ext = path.split(".")[-1]
      if ext.lower() == "txt":
        # it shouldn't be hidden or in hidden directory
        if not "/." in path:
          return path               
  return "" # there isn't any text file

2 个答案:

答案 0 :(得分:3)

使用os.walk(在您的示例中)绝对是一个好的开始。

您可以使用fnmatchlink to the docs here)来简化其余代码。

E.g:

...
    if fnmatch.fnmatch(file, '*.txt'):
        print file
...

答案 1 :(得分:2)

我使用fnmatch而不是字符串操作。

import os, os.path, fnmatch

def find_files(root, pattern, exclude_hidden=True):
    """ Get the path to arbitrary .ext file under the root dir """
    for dir, _, files in os.walk(root):
        for f in fnmatch.filter(files, pattern):
            path = os.path.join(dir, f)
            if '/.' not in path or not exclude_hidden:
                yield path

我还将函数重写为更通用(和“pythonic”)。要获得一个路径名,请将其命名为:

 first_txt = next(find_files(some_dir, '*.txt'))