programing

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

lovejava 2023. 7. 23. 13:54

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

내 파이썬 스크립트는os.listdir(path)여기서 경로는 하나씩 처리해야 하는 아카이브를 포함하는 대기열입니다.

문제는 제가 목록을 배열로 가져와서 간단한 작업을 한다는 것입니다.array.pop(0)제가 프로젝트를 전복시키기 전까지는 잘 작동했습니다.이제 알겠어요.svn내 배열에 있는 폴더는 물론 내 응용프로그램을 손상시킵니다.

그래서 제 질문은 다음과 같습니다: 실행할 때 숨겨진 파일을 무시하는 기능이 있습니까?os.listdir()그리고 만약 그렇지 않다면 어떤 방법이 가장 좋을까요?

직접 작성할 수 있습니다.

import os

def listdir_nohidden(path):
    for f in os.listdir(path):
        if not f.startswith('.'):
            yield f

또는 글로벌을 사용할 수 있습니다.

import glob
import os

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() if not f.startswith(".")), key=str.lower)

(사용하도록 편집됨)key=str.lower대신에lambda)

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

조쉬메이커는 당신의 질문에 대한 올바른 해결책을 가지고 있습니다.
os.listdir()를 사용하여 숨겨진 파일을 무시하는 방법은 무엇입니까?

그러나 파이썬 3에서는 os 대신 pathlib를 사용하는 것이 좋습니다.

from pathlib import Path 
visible_files = [
    file for file in Path(".").iterdir() if not file.name.startswith(".")
]

글로벌:

>>> 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가 언급했듯이 플랫폼 독립성을 위해 글로벌은 잘 작동합니다.

import glob
glob.glob('*')
filenames = (f.name for f in os.scandir() if not f.name.startswith('.'))

앞에 "."가 있는 파일이나 디렉터리를 제외하는 단순 루프를 사용할 수 있습니다.

전문가용 코드:

import os

directory_things = [i for i in os.listdir() if i[0] != "."] # Exclude all with . in the start

노브고로드 코드

items_in_directory = os.listdir()
final_items_in_directory = []

for i in items_in_directory:
    if i[0] != ".": # If the item doesn't have any '.' in the start
        final_items_in_directory.append(i)

언급URL : https://stackoverflow.com/questions/7099290/how-to-ignore-hidden-files-using-os-listdir