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

Python에서 Unix 파일 이름 패턴 일치

<시간/>

여기서 우리는 파이썬을 사용하여 유닉스 쉘 스타일 패턴 매칭 기술을 얻는 방법을 볼 것입니다. 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'>
$