여기서 우리는 파이썬을 사용하여 유닉스 쉘 스타일 패턴 매칭 기술을 얻는 방법을 볼 것입니다. fnmatch라는 모듈이 있습니다. , 작업을 수행하는 데 사용됩니다. 이 모듈은 파일 이름을 패턴과 비교한 다음 일치에 따라 True 또는 False를 반환하는 데 사용됩니다.
처음에 사용하려면 fnmatch를 가져와야 합니다. 표준 라이브러리 모듈.
import fnmatch
Unix 터미널에는 패턴과 일치하는 몇 가지 와일드카드가 있습니다. 다음과 같습니다 -
- '*' 별표는 모든 항목과 일치하는 데 사용됩니다.
- '?' 물음표는 단일 문자를 일치시키기 위한 것입니다.
- [seq] 시퀀스는 시퀀스의 문자를 일치시키는 데 사용됩니다.
- [!seq] Not in Sequence는 시퀀스에 없는 문자를 일치시키는 데 사용됩니다.
별표나 물음표를 문자로 검색하려면 [*] 또는 [?]
와 같이 사용해야 합니다.fnmatch() 메소드
fnmatch() 메서드는 파일 이름과 패턴이라는 두 개의 인수를 사용합니다. 이 함수는 파일 이름이 주어진 패턴과 일치하는지 여부를 확인하는 데 사용됩니다. 운영 체제가 대소문자를 구분하는 경우 매개변수는 일치하기 전에 대문자 또는 소문자로 정규화됩니다.
예시 코드
import fnmatch import os file_pattern = 'test_f*' files = os.listdir('./unix_files') for filename in files: print('File: {}\t: {}'.format(filename, fnmatch.fnmatch(filename, file_pattern)))
출력
$ python3 310.UNIX_filename.py File: test_file5.txt : True File: test_file2.png : True File: test_file1.txt : True File: another_file.txt : False File: TEST_FILE4.txt : False File: abc.txt : False File: test_file3.txt : True $
filter() 메소드
filter() 메서드도 두 개의 매개 변수를 사용합니다. 첫 번째는 이름이고 두 번째는 패턴입니다. 이 패턴은 모든 파일 이름 목록에서 일치하는 파일 이름 목록을 찾습니다.
예시 코드
import fnmatch import os file_pattern = 'test_f*' files = os.listdir('./unix_files') match_file = fnmatch.filter(files, file_pattern) print('All files:' + str(files)) print('\nMatched files:' + str(match_file))
출력
$ python3 310.UNIX_filename.py All files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'another_file.txt', 'TEST_FILE4.txt', 'abc.txt', 'test_file3.txt'] Matched files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'test_file3.txt'] $
translate() 메소드
translate() 메서드는 하나의 매개변수를 사용합니다. 매개변수는 패턴입니다. 이 함수를 사용하여 쉘 스타일 패턴을 Python의 정규식을 사용하여 일치하는 다른 유형의 패턴으로 변환할 수 있습니다.
예시 코드
import fnmatch, re file_pattern = 'test_f*.txt' unix_regex = fnmatch.translate(file_pattern) regex_object = re.compile(unix_regex) print('Regular Expression:' + str(unix_regex)) print('Match Object:' + str(regex_object.match('test_file_abcd123.txt')))
출력
$ python3 310.UNIX_filename.py Regular Expression:(?s:test_f.*\.txt)\Z Match Object:<_sre.SRE_Match object; span=(0, 21), match='test_file_abcd123.txt'> $