2012-03-18 8 views
3

os.listdir('somedir')を使用して、すべてのファイルをsomedirにすることができます。しかし、私が望むのは、シェルの下にあるfind . -type fの結果のような通常のファイル(ディレクトリを除く)だけです。Pythonのディレクトリの下にある通常のファイル(ディレクトリを除く)のみをリストする方法

[path for path in os.listdir('somedir') if not os.path.isdir('somedir/'+path)]を使用して、この関連する質問と同様の結果を得ることができます。How to list only top level directories in Python?それを行うためのより簡潔な方法があるかどうか疑問に思うだけです。

答えて

7

あなたはパス、フォルダやファイルのタプルを返しos.walkを、使用することができます:あなたが唯一のトップレベルのディレクトリ内のファイルが必要な場合は

files = next(os.walk('somedir'))[2] 
0

以前os.walk答えは完璧です。あなたもサブディレクトリのファイルをしたい場合(findラ)にもかかわらず、あなたはそれぞれのディレクトリを処理する必要があり、例えば:

def find_files(path): 
    for prefix, _, files in os.walk(path): 
     for name in files: 
      yield os.path.join(prefix, name) 

list(find_files('.'))find . -type f -printがあなたを与えているのと同じもののリスト(listがあるためでありますfind_filesは、それが明白でない場合のジェネレータです)。

3

私はこのような作業を行う方法がいくつかあります。私は解決策の簡潔な性質についてはコメントできません。 FWIWはここにあります:

1.このコードは、.txtで終わるすべてのファイルを取ります。あなたは「.endswith」の部分を削除することがあり、ここで

import os 
for root, dirs, files in os.walk('./'): #current directory in terminal 
    for file in files: 
      if file.endswith('.txt'): 
      #here you can do whatever you want to with the file. 

2。このコードは、パスが関数に提供されていると仮定しますと、リストにし、サブディレクトリがである場合、すべての.txtファイルを追加しますパス、それは私がコードは自然の中でただ骨格である知っているが、私はあなたが一般的な画像を得ることができると思い

def readFilesNameList(self, path): 
    basePath = path 
    allfiles = [] 
    subfiles = [] 
    for root, dirs, files in os.walk(basePath): 
     for f in files: 
     if f.endswith('.txt'): 
      allfiles.append(os.path.join(root,f)) 
      if root!=basePath: 
       subfiles.append(os.path.join(root, f)) 

をサブファイルするサブディレクトリにこれらのファイルを追加します。あなたが簡潔な方法を見つけたら
投稿! :)

関連する問題