1 minute read

딥러닝 스터디를 하면서 MNIST 나 VGG 등 모델들을 다뤄보면서 맨처음 학습 데이터들을 디렉토리 지정하는 코드에서 상당히 멘붕을 겪었었습니다. 그래서 그런김에 공부하면서 정리해보려합니다.


디렉토리의 구성을 알아보자 - os.path

os.path는 경로명과 파일명에 대한 유용한 함수를 제공하는 모듈입니다.

os.path 모듈들을 소개하면 다음과 같습니다.

예제를 통해 사용법을 익혀봅시다!

문제 : 특정 폴더(디렉토리)에 어떤 파이썬 파일이 있는지 알고자 할 때, 매개변수에 지정한 디렉토리의 파이썬 파일을 모두 출력하는 search(dirname) 함수를 작성하시오. (단, 하위 디렉토리의 파이썬 파일도 모두 출력해야 한다.)

풀이는 다음과 같습니다.

import os

def search(dirname):
    filenames = os.listdir(dirname)
    for filename in filenames:
        filepath = os.path.join(dirname, filename)
        if os.path.isdir(filepath):
            search(filepath)
        elif os.path.isfile(filepath):
            name, ext = os.path.splitext(filepath)
            if ext == '.ipynb':
                print(filepath)

입력으로 받은 디렉토리의 모든 파일을 os.listdir()로 얻고 확장자가 .py이면 파일명을 출력합니다.

os.listdir()로 얻은 경로가 파일이 아닌 디렉토리라면 다시 그 경로를 입력으로 하여 search() 함수를 재귀호출합니다.

os.path 더 자세한 내용


파일을 찾기 - glob.glob

glob는 패턴(유닉스 셀이 사용하는 규칙)을 이용하여 파일을 검색할 때 사용하는 모듈입니다.

흔히 사용하는 glob.glob에 대해서 살펴보겠습니다.

가장 기본으로 별표 1개 *로 input을 지정하여 현재 폴더 내 모든 파일, 하위 폴더의 목록을 전부 가져올 수 있습니다.

먼저 !ls 로 현재 디렉토리에 대해서 알아보겠습니다. 필자는 주피터 노트북 환경에서 실행하였습니다.

!ls

이제 glob.glob로 다음과 같이 나오는지 확인해보겠습니다.

import glob
glob.glob('./*')

./* 로 현재 디렉토리 내 전체파일, 하위폴더 모으기

* 로 현재 디렉토리 내 전체파일, 하위폴더 모으기

glob.glob('*')


*을 이용하여 특정이름이나 확장자를 가진 파일을 찾는 법

# 특정 확장자 예시
glob.glob('*.png') # '~.png' 꼴
glob.glob('*.txt') # '~.txt' 꼴

# 특정 이름 예시
glob.glob('2*') # '2~.png' 꼴 *앞에 붙으면 시작글씨를, 뒤에 붙으면 마지막 글씨를 의미
glob.glob('*a*') # '~a~.txt' 꼴 **사이에 들어간 문자는 중간에 낀 문자가 a일 때를 의미


하위 디렉토리 내 파일/폴더 목록 반환하는 법 h

현재 + 하위 디렉토리의 모든 확장자 파일을 찾는 법 **/*, recursive=True

glob 더 자세한 내용

파일 경로를 객체로 다루기 - pathlib

pathlib은 파일 시스템 경로를 문자열이 아닌 객체로 만들어 여러가지 일을 할 수 있도록 하는 모듈입니다.

파일명 혹은 부모 디렉토리를 알아내거나, 경로 목록을 알아내거나, 파일을 작성하고 삭제하는 등 파일관련된 다양한 처리가 가능해집니다.

기존의 os.path 방식보다 사용하기 편합니다.

to be continue …

Leave a comment