Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 Unix 파일 이름 패턴 일치(fnmatch)

<시간/>

Unix 셸 명령줄에 사용되는 와일드카드 패턴은 정규식 구문과 다릅니다. Python의 표준 라이브러리에서 fnmatch 모듈은 Unix 와일드 카드 패턴을 제공합니다.

다음 함수는 fnmatch 모듈에 정의되어 있습니다.

fnmatch()

이 함수에는 파일 이름과 문자의 문자열 패턴이라는 두 개의 매개변수가 필요합니다. 파일 이름은 주어진 패턴과 일치하고 함수는 True 또는 False를 반환합니다.

다음 예는 현재 디렉토리에서 "*.py" 패턴과 일치하는 모든 파일을 나열합니다.

>>> import glob,fnmatch>>> (glob.glob('*.*')):if (fnmatch.fnmatch(files, "*.py")):print(files) 

fnmatchcase()

이 함수는 fnmatch()와 유사합니다. 그러나 이 함수는 파일 이름과 패턴의 대소문자 구분 일치를 수행합니다.

다음 예에서 이름이 'l'로 시작하고 확장자가 '.py'인 모든 파일은 파일 목록 개체에서 먼저 수집됩니다. fnmatch() 함수는 'lo' 문자로 시작하는 이름만 인쇄하도록 적용됩니다.

>>> files=glob.glob("l*.*")>>> files['LICENSE.txt', 'lines.txt', 'listwidget.ui', 'lo1.ui', 'lo2 .ui', 'lo3.ui', 'logo.png', 'logo.svg', 'lw.ui']>>> 파일의 파일:if fnmatch.fnmatchcase(file,"lo*.*") ==True:인쇄(파일)lo1.uilo2.uilo3.uilogo.pnglogo.svg

필터()

이 함수는 주어진 패턴 매개변수와 이름이 일치하는 파일만 반환합니다.

다음 명령문은 현재 디렉토리의 모든 파일 중 확장자가 '.txt'인 파일 목록을 반환합니다.

>>> fnmatch.filter(파일,"*.txt")['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt' ', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt', 'zen.txt', 'zen1.txt', 'zenbak.txt']

번역()

이 함수는 UNIX 스타일 패턴을 해당 RegEx 형식으로 변환하는 데 유용합니다. translate() 함수의 반환 값은 re 모듈의 compile() 함수를 사용하여 정규식으로 변환해야 합니다. 그런 다음 패턴을 일치시키는 데 사용됩니다.

>>> pattern="*.txt">>> 다시 가져오기>>> reg=fnmatch.translate(pattern)>>> reg'(?s:.*\\.txt)\\Z'>>> rec=re.compile(reg)>>> glob.glob("*.*"):if re.match(rec,file):print(file)
의 파일

이 기사에서는 fnmatch 모듈의 기능에 대해 설명했습니다.