English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
여기서는 Python을 사용하여 UNIX 셸 스타일 패턴 매칭 기술을 볼 수 있습니다.fnmatch모듈은 작업을 완료하는 데 사용됩니다. 이 모듈은 파일 이름을 패턴과 비교하고, 매칭 결과에 따라 True 또는 False를 반환합니다.
이를 사용하기 전에 먼저 가져와야 합니다fnmatch기본 라이브러리 모듈.
import fnmatch
Unix 터미널에서는 일부 와일드 카드가 패턴을 매칭할 수 있습니다. 다음과 같습니다-
'*문자열 '별표(*)'은 모든 내용을 매칭하는 데 사용됩니다.
문자열 '?'은 단일 문자를 매칭하는 데 사용됩니다.
[seq] 시퀀스는 시퀀스에서의 문자를 매칭하는 데 사용됩니다
[!seq]는 시퀀스에서 존재하지 않는 문자를 매칭하는 데 사용됩니다.
별표(*)나 물음표(?)를 문자로 검색하려면 이렇게 사용해야 합니다: [*] 또는 [?]
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'> $