2012-03-18 3 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)) 

를 서브 파일을 추가합니다. 간결한 방법을 찾으면
게시물을 게시하십시오! :)

관련 문제