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
'programing' 카테고리의 다른 글
쿼리하는 동안 MySQL 서버에 대한 연결이 끊어졌습니까? (0) | 2023.07.23 |
---|---|
오라클에서 csv를 테이블로 변환하는 방법 (0) | 2023.07.23 |
각 TILL의 최대값과 해당 TILL의 항목 수를 사용하여 결과 집합을 만드는 방법 (0) | 2023.07.23 |
CSV 파일에 새 줄 추가 (0) | 2023.07.23 |
없음 값이란 무엇입니까? (0) | 2023.07.23 |