DS가 되기 위한 여정 👩‍💻

Projects/Comento_cctv_object_detection

[학습 데이터 셋 분리] replace() 보다는 os.path.splitext()

Tashapark 2025. 3. 17. 23:59
728x90
반응형

- 데이터 셋을 분리하는 코드에 멘토님이 코드 리뷰를 해주셨는데, 

현재는 확장자가 png 하나이지만, 나중에는 어떻게 될 지 모르기 때문에

replace()로 단순히 대치 하는 것보다 다른 방법을 추천해 주셨다. 

 

- 학습할 데이터 셋을 나누는 과정에서, 라벨 리스트를 따로 추출함. 

-> train 폴더에 있기 때문에 그냥 같은 제목으로 나눠도 되지만,

    정확하게  각 img에 대응되는 txt인지 확인 하기 위해서 이 과정을 거침. 

=> 이 부분이 사실 좀 이해가 안 갔었음. 어차피 퍼센트로 나눌 건데? 이런 느낌이었는데 

     이미지와 라벨 파일을 서로 연경하는 과정을 정확하게 트랙킹하기 위함이었다고 해서 이해가 감. 

 

수정 전 

all_labels = [img.replace(".png", ".txt") for img in imgs]
# replace()로 단순 대치하는 것은 직관적
#but, 여러 확장자가 있을 때 처리를 추가적으로 해줘야 함.. -> 이 부분을 리뷰해주심

 

수정 후

2가지 방법을 추천해 주셨음. 

  data_dir에 있는 모든 파일을
basename만 불러와서 .txt 만들기
os.path.splitext()
동작 원리 파일 이름만 추출 후 .txt로 변경 (split('.')[0]) 파일 이름과 확장자를 안전하게 분리하고 .txt로 변경
장점 - 코드 간결하고 직관적
- 다양한 확장자에 유연함
- 빠르게 처리 가능
- 확장자 분리 및 처리에 안전
- 여러 점을 포함한 파일 이름에 문제 없음
- 다양한 확장자 안전 처리
단점 - 파일 이름에 여러 개의 점이 있을 경우 문제
- 경로 처리나 특수한 경우에는 추가 처리 필요
- 코드가 상대적으로 길어질 수 있음
적합한 상황  - 확장자와 관계없이 파일 이름만 기준으로 라벨을 만들고 싶을 때 (확장자가 고정)  - 다양한 확장자와 파일 형식에 대해 안전하게 처리하고 싶을 때

 

- 2가지 방법중 os.path.splitext()가 더 적절하다고 판단되어서 그것으로 수정함.

all_labels = [os.path.splitext(img)[0] + '.txt' for img in imgs] # os.path.splitext() 방식
728x90
반응형