os.listdir ()을 사용하여 숨겨진 파일을 무시하는 방법은 무엇입니까?
내 파이썬 스크립트 os.listdir(path)
는 경로가 하나씩 처리해야하는 아카이브를 포함하는 대기열 인 위치를 실행합니다 .
문제는 목록을 배열로 얻은 다음 간단한 array.pop(0)
. 프로젝트를 전복시킬 때까지 잘 작동했습니다. 이제 .svn
배열에 폴더가 생겼으며 물론 응용 프로그램이 충돌합니다.
그래서 여기 내 질문이 있습니다 : 실행할 때 숨겨진 파일을 무시하는 기존 기능이 os.listdir()
있습니까? 아니면 최선의 방법은 무엇입니까?
감사합니다.
직접 작성할 수 있습니다.
def listdir_nohidden(path):
for f in os.listdir(path):
if not f.startswith('.'):
yield f
또는 glob을 사용할 수 있습니다 .
def listdir_nohidden(path):
return glob.glob(os.path.join(path, '*'))
둘 중 하나는로 시작하는 모든 파일 이름을 무시합니다 '.'
.
이것은 오래된 질문이지만 목록 이해력 사용에 대한 분명한 대답이 누락 된 것처럼 보이므로 완전성을 위해 여기에 추가합니다.
[f for f in os.listdir(path) if not f.startswith('.')]
참고로 문서 상태 listdir
는 '임의의 순서'로 결과를 반환하지만 일반적인 사용 사례는 알파벳순으로 정렬하는 것입니다. 대소 문자에 관계없이 디렉토리 내용을 알파벳순으로 정렬하려면 다음을 사용할 수 있습니다.
sorted([f for f in os.listdir('./')], key=lambda f: f.lower())
Windows, Linux 및 OS X :
if os.name == 'nt':
import win32api, win32con
def folder_is_hidden(p):
if os.name== 'nt':
attribute = win32api.GetFileAttributes(p)
return attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM)
else:
return p.startswith('.') #linux-osx
filter( lambda f: not f.startswith('.'), os.listdir('.'))
글롭 :
>>> import glob
>>> glob.glob('*')
( glob
사용 listdir
하고 fnmatch
후드 아래에서 주장 하지만 '.'
을 사용하지 않고 선행을 확인합니다 fnmatch
.)
루프의 모든 항목을 살펴 보는 것은 너무 많은 작업이라고 생각합니다. 다음과 같이 더 간단한 것을 선호합니다.
lst = os.listdir(path)
if '.DS_Store' in lst:
lst.remove('.DS_Store')
디렉토리에 숨겨진 파일 이 두 개 이상있는 경우 다음이 도움이 될 수 있습니다.
all_files = os.popen('ls -1').read()
lst = all_files.split('\n')
@Josh가 언급했듯이 플랫폼 독립성을 위해 glob이 잘 작동합니다.
import glob
glob.glob('*')
filenames = (f.name for f in os.scandir() if not f.name.startswith('.'))
참고 URL : https://stackoverflow.com/questions/7099290/how-to-ignore-hidden-files-using-os-listdir
'Development Tip' 카테고리의 다른 글
C # .NET에서 문자열의 문자를 빈 문자로 바꾸는 방법 (0) | 2020.10.31 |
---|---|
IE에서 클릭 할 수없는 절대 위치 앵커 태그 (텍스트 없음) (0) | 2020.10.31 |
Rails 3는 유효성 검사 및 콜백 건너 뛰기 (0) | 2020.10.31 |
"/", "\"를 사용한 플랫폼 독립적 경로 연결? (0) | 2020.10.31 |
oh-my-zsh는 느리지 만 특정 Git 저장소에서만 (0) | 2020.10.31 |