Development Tip

os.listdir ()을 사용하여 숨겨진 파일을 무시하는 방법은 무엇입니까?

yourdevel 2020. 10. 31. 10:15
반응형

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

반응형