fnmatch — 유닉스 파일 이름 패턴 매칭
fnmatch — 유닉스 파일 이름 패턴 매칭
이 모듈은 유닉스 셸 스타일 와일드카드를 지원합니다. 이것은 re 모듈에 문서화된 정규 표현식과 다릅니다. 셸 스타일 와일드카드에 사용되는 특수 문자는 다음과 같습니다:
| 패턴 | 의미 |
|---|---|
* |
모든 것과 일치 |
? |
임의의 단일 문자와 일치 |
[seq] |
seq의 임의 문자와 일치 |
[!seq] |
seq에 없는 임의 문자와 일치 |
본문
리터럴 일치를 위해 메타 문자를 괄호로 감쌉니다. 예를 들어 '[?]'는 문자 '?'와 일치합니다.
파일 이름 구분자(유닉스에서는 '/')는 이 모듈에 특별하지 않습니다. 경로 이름 확장은 glob 모듈을 참조하세요(glob은 filter()를 사용해 경로 이름 세그먼트를 일치시킵니다). 마찬가지로 마침표로 시작하는 파일 이름도 이 모듈에 특별하지 않으며 *와 ? 패턴으로 일치됩니다.
별도로 명시되지 않으면 "파일 이름 문자열"과 "패턴 문자열"은 str 또는 ISO-8859-1로 인코딩된 bytes 객체를 가리킵니다. 아래 문서화된 함수는 bytes 패턴과 str 파일 이름을 섞을 수 없으며 그 반대도 마찬가지입니다.
마지막으로, fnmatch(), fnmatchcase(), filter(), filterfalse() 함수에서 컴파일된 (typed) 정규식 패턴을 캐시하는 데 maxsize 32768의 @functools.lru_cache가 사용됩니다.
함수
fnmatch.fnmatch(name, pat)— 파일 이름 문자열name이 패턴 문자열pat과 일치하는지 테스트하여True또는False를 반환합니다. 두 매개변수는os.path.normcase()로 대소문자가 정규화됩니다.fnmatchcase()는 운영 체제의 표준 여부와 무관하게 대소문자 구분 비교를 수행합니다.
다음 예는 현재 디렉터리에서 .txt 확장자를 가진 모든 파일 이름을 출력합니다:
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print(file)
fnmatch.fnmatchcase(name, pat)—name이pat과 일치하는지 테스트하며, 비교는 대소문자를 구분하고os.path.normcase()를 적용하지 않습니다.fnmatch.filter(names, pat)— 파일 이름 문자열의 이터러블names중 패턴pat과 일치하는 요소로 리스트를 만듭니다.[n for n in names if fnmatch(n, pat)]와 같지만 더 효율적으로 구현됩니다.fnmatch.filterfalse(names, pat)— 패턴pat과 일치하지 않는 요소로 리스트를 만듭니다.[n for n in names if not fnmatch(n, pat)]와 같지만 더 효율적입니다 (3.14에서 추가).fnmatch.translate(pat)— 셸 스타일 패턴pat을re.match()에 사용할 정규 표현식으로 변환해 반환합니다. 패턴은str이어야 합니다.
예:
>>> import fnmatch, re
>>> regex = fnmatch.translate('*.txt')
>>> regex
'(?s:.*\\.txt)\\z'
>>> reobj = re.compile(regex)
>>> reobj.match('foobar.txt')
<re.Match object; span=(0, 10), match='foobar.txt'>