인공지능을 좋아하는 곧미남

[python] re.compile 문자열 정규화로 파일 path 정렬하기 본문

code_study/python world

[python] re.compile 문자열 정규화로 파일 path 정렬하기

곧미남 2024. 12. 3. 09:48

오늘은 re.compile을 활용해서 파일 path pattern을 파악하여 정규화한 뒤 폴더명이나 파일명을 추출하는 방법을 알려드리겠습니다.

 


 

- 파일명 패턴 저장하기 -

 

제가 실험할 데이터 경로는 아래와 같습니다.

 

entry = D:\STT_project\Keyword-Spotting-ConvMixer\dataset\google_speech_recognition_v2\backward\0a2b400e_nohash_0.wav

 

엄청 복잡한데요. 여기서 python의 내장함수인 re를 활용해서 폴더명과 파일명을 추출할 수 있습니다.

    pattern = re.compile(r"(.+[\\/])?(\w+)[\\/](\w+_\w+_\w+)\.wav")
   
    - 설명 -
    (.+[\\/])? 상위 디렉토리 경로 저장
    D:\STT_project\Keyword-Spotting-ConvMixer\dataset\google_speech_recognition_v2
    (\w+)[\\/] 클래스 명 저장
    backward
    (\w+_\w+_\w+) -> ()_()_() 파일명 저장
    0a2b400e_nohash_0.wav
    \.wav -> .wav 파일 포맷 저장

 

r"(.+[\\/])?(\w+)[\\/](\w+_\w+_\w+)\.wav" 이런식으로 정규화 패턴을 활용하면 원하는 파일명의 패턴을 불러올 수 있습니다.

 

- 파일명 패턴을 활용해서 파일명 불러오기 -

 

r = re.match(pattern, entry)을 활용하면, entry에 저장된 문자열을 기준으로 정규화 pattern을 적용하여 group으로 분할할 수 있도록 한다.

 

이렇게 group 넘버로 각 정규화식의 순서를 기반으로 문자열을 나눌 수 있다.

label, uid = r.group(2), r.group(3)

 

label = backward
uid = 0a2b400e_nohash_0

 

이렇게 저장된다.

 

- 최종 코드 -

 
import re

entry = "D:\STT_project\Keyword-Spotting-ConvMixer\dataset\google_speech_recognition_v2\\backward\\0a2b400e_nohash_0.wav"

pattern = re.compile(r"(.+[\\/])?(\w+)[\\/](\w+_\w+_\w+)\.wav")

r = re.match(pattern, entry)

total_str, dir_path, label, uid = r.group(0), r.group(1), r.group(2), r.group(3)

print(r)
print(total_str)
print(dir_path)
print(label)
print(uid)

 

- 출력 내용 -

<re.Match object; span=(0, 109), match='D:\\STT_project\\Keyword-Spotting-ConvMixer\\data>
D:\STT_project\Keyword-Spotting-ConvMixer\dataset\google_speech_recognition_v2\backward\0a2b400e_nohash_0.wav
D:\STT_project\Keyword-Spotting-ConvMixer\dataset\google_speech_recognition_v2\
backward
0a2b400e_nohash_0

반응형
Comments