[python] 현재 디렉토리에만 파일 나열

파이썬에서는 현재 디렉토리의 모든 파일 만 나열하고 싶습니다. 하위 디렉토리 또는 상위 디렉토리에서 파일을 나열하지 않습니다.

비슷한 솔루션이있는 것 같지만 저에게는 효과가없는 것 같습니다. 내 코드 스 니펫은 다음과 같습니다.

import os
for subdir, dirs, files in os.walk('./'):
    for file in files:
      do some stuff
      print file

현재 디렉토리에 holygrail.py와 Tim이라는 두 개의 파일이 있다고 가정 해 봅시다. 폴더도 있고 그 안에 파일 두 개 (Arthur와 Lancelot이라고 함)를 포함합니다. 스크립트를 실행하면 다음과 같은 결과가 나타납니다.

holygrail.py
Tim
Arthur
Lancelot

holygrail.py와 Tim에 만족합니다. 그러나 Arthur와 Lancelot이라는 두 파일은 나열하고 싶지 않습니다.



답변

그냥 사용 os.listdir하고 os.path.isfile대신 os.walk.

예:

import os
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
    # do something

그러나 이것을 다른 디렉토리에 적용하는 동안 조심하십시오.

files = [f for f in os.listdir(somedir) if os.path.isfile(f)].

f전체 경로가 아니라 현재 디렉토리와 관련이 있기 때문에 작동 하지 않습니다.

따라서 다른 디렉토리에서 필터링하려면 다음을 수행하십시오. os.path.isfile(os.path.join(somedir, f))

( 힌트에 대한 인과 감사 합니다)


답변

os.listdir이 목적으로 사용할 수 있습니다 . 디렉토리가 아닌 파일 만 원하는 경우를 사용하여 결과를 필터링 할 수 있습니다 .os.path.isfile

예:

files = os.listdir(os.curdir)  #files and directories

또는

files = filter(os.path.isfile, os.listdir( os.curdir ) )  # files only
files = [ f for f in os.listdir( os.curdir ) if os.path.isfile(f) ] #list comprehension version.


답변

import os

destdir = '/var/tmp/testdir'

files = [ f for f in os.listdir(destdir) if os.path.isfile(os.path.join(destdir,f)) ]


답변

사용할 수 있습니다 os.scandir(). stdlib의 새로운 기능은 Python 3.5부터 시작합니다.

import os

for entry in os.scandir('.'):
    if entry.is_file():
        print(entry.name)

보다 빠릅니다 os.listdir(). os.walk() 구현 os.scandir() 합니다.


답변

이것은 os.walk ()로 수행 할 수 있습니다

파이썬 3.5.2 테스트;

import os
for root, dirs, files in os.walk('.', topdown=True):
    dirs.clear() #with topdown true, this will prevent walk from going into subs
    for file in files:
      #do some stuff
      print(file)

dirs.clear () 행을 제거하면 하위 폴더의 파일이 다시 포함됩니다.

참조로 업데이트 ;

os.walk는 여기에 문서화되어 있으며 트리플 목록 작성 및 하향 효과에 대해 설명합니다.

목록을 비우기 위해 여기에 문서화 된 .clear ()

os.walk에서 관련 목록을 지우면 결과를 원하는대로 적용 할 수 있습니다.


답변

import os
for subdir, dirs, files in os.walk('./'):
    for file in files:
      do some stuff
      print file

del dirs[:]다음 과 같이이 코드를 개선 할 수 있습니다 .

import os
for subdir, dirs, files in os.walk('./'):
    del dirs[:]
    for file in files:
      do some stuff
      print file

또는 현재 작업 디렉토리로 os.walk를 가리킬 수 있다면 더 좋습니다.

import os
cwd = os.getcwd()
for subdir, dirs, files in os.walk(cwd, topdown=True):
    del dirs[:]  # remove the sub directories.
    for file in files:
      do some stuff
      print file


답변

대신에 os.walk, 단지 사용os.listdir