2012-04-24 17 views
2

ディレクトリツリーのどこかに存在する任意のテキストファイル(.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

代わりに[splitext]手動で分割することはできますが、それ以外の場合は、私にはうまく見えます。 – jterrace

答えて

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 

私はまた、より一般的な(そして "ピジョンソニック")に機能を書き直しました。パス名を1つだけ取得するには、次のように指定します。

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

os.walkを使用すると、間違いなく良いスタートです。

fnmatchlink to the docs here)を使用すると、残りのコードを簡略化できます。

例えば:

... 
    if fnmatch.fnmatch(file, '*.txt'): 
     print file 
... 
関連する問題