[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