현재 디렉터리에 있는 파일만 나열
Python에서는 현재 디렉터리에 있는 모든 파일만 나열하고 싶습니다.서브 디렉토리나 부모로부터 파일을 리스트 하고 싶지 않습니다.
비슷한 해결책이 밖에 있는 것 같긴 한데, 나한테는 효과가 없는 것 같아.코드 스니펫은 다음과 같습니다.
import os
for subdir, dirs, files in os.walk('./'):
for file in files:
do some stuff
print file
예를 들어 현재 디렉토리 내에 holygrail.py과 Tim이라는2개의 파일이 있다고 합시다.폴더도 있고 그 안에 아서와 랜슬롯이라고 부르자 두 개의 파일이 들어있어요.스크립트를 실행하면 다음과 같이 표시됩니다.
holygrail.py
Tim
Arthur
Lancelot
저는 holygrail.py과 Tim에 만족합니다.하지만 두 파일, 아서와 랜슬롯은 리스트에 올리고 싶지 않아요.
대신 및 을 사용합니다.
예:
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()
.
모듈을 사용할 수 있습니다.
from pathlib import Path
x = Path('./')
print(list(filter(lambda y:y.is_file(), x.iterdir())))
이것은 os.walk()로 실행할 수 있습니다.
python 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
언급URL : https://stackoverflow.com/questions/11968976/list-files-only-in-the-current-directory
'programing' 카테고리의 다른 글
DATE 또는 DATETIME 기본값을 설정할 때 MySQL에서 오류가 발생함 (0) | 2022.10.06 |
---|---|
왜 PHP의 함수와 메서드는 대소문자를 구분하지 않는가? (0) | 2022.10.06 |
임시 테이블에 결합하면 쿼리가 느려지는 이유는 무엇입니까? (0) | 2022.10.06 |
Python은 테일 재귀를 최적화합니까? (0) | 2022.10.06 |
한 자바스크립트로 작성된 함수를 다른 JS파일로 호출할 수 있습니까? (0) | 2022.10.06 |