본문으로 바로가기
728x90

하위 디렉터리 검색 os.walk(path)

os.walk() 은 인자로 받은 경로에 대해 하위 디렉터리를 검색합니다.

디렉터리 구조는 다음과 같습니다.

C:.
└─data
    ├─dir_1
    ├─dir_2
    │  ├─dir_1
    │  └─dir_2
    └─dir_3
import os

PATH = os.path.dirname(os.path.abspath(__file__))
dir_name = 'data'

for path, dirs, files in os.walk(dir_name):
    print(path, dirs, files)
더보기
data ['dir_1', 'dir_2', 'dir_3'] []
data\dir_1 [] ['text_file.txt', 'text_file2.txt']
data\dir_2 ['dir_1', 'dir_2'] ['text_file.txt', 'text_file2.txt']
data\dir_2\dir_1 [] []
data\dir_2\dir_2 [] ['19.png', 'text_file.txt']
data\dir_3 [] ['text_file.txt', 'text_file2.txt']

 

os.path.join() 함수를 이용해서 출력해보면, 다음과 같이 경로를 얻을 수 있습니다.

import os

PATH = os.path.dirname(os.path.abspath(__file__))
dir_name = 'data'

for path, dirs, files in os.walk(dir_name):
    # print(path, dirs, files)
    print(os.path.join(PATH, path))
더보기
c:\Users\Desktop\python\os_\ex8\data
c:\Users\Desktop\python\os_\ex8\data\dir_1
c:\Users\Desktop\python\os_\ex8\data\dir_2
c:\Users\Desktop\python\os_\ex8\data\dir_2\dir_1
c:\Users\Desktop\python\os_\ex8\data\dir_2\dir_2
c:\Users\Desktop\python\os_\ex8\data\dir_3

 

모든 경로 구하기

다음과 같이 절대경로를 넣어주시면 위에 예제보다 효율적입니다.

import os

PATH = os.path.dirname(os.path.abspath(__file__))
dir_name = 'data'
dir_path = os.path.join(PATH, dir_name)
for path, dirs, files in os.walk(dir_path):
    print(path)
    for file in files:
        file_path = os.path.join(path, file)
        print(file_path)
더보기
c:\Users\Desktop\python\os_\ex8\data
c:\Users\Desktop\python\os_\ex8\data\dir_1
c:\Users\Desktop\python\os_\ex8\data\dir_1\text_file.txt
c:\Users\Desktop\python\os_\ex8\data\dir_1\text_file2.txt
c:\Users\Desktop\python\os_\ex8\data\dir_2
c:\Users\Desktop\python\os_\ex8\data\dir_2\text_file.txt
c:\Users\Desktop\python\os_\ex8\data\dir_2\text_file2.txt
c:\Users\Desktop\python\os_\ex8\data\dir_2\dir_1
c:\Users\Desktop\python\os_\ex8\data\dir_2\dir_2
c:\Users\Desktop\python\os_\ex8\data\dir_2\dir_2\text_file.txt
c:\Users\Desktop\python\os_\ex8\data\dir_2\dir_2\19.png
c:\Users\Desktop\python\os_\ex8\data\dir_3
c:\Users\Desktop\python\os_\ex8\data\dir_3\text_file.txt
c:\Users\Desktop\python\os_\ex8\data\dir_3\text_file2.txt

 

또한 os.path.splitext() 를 사용하여 다음과 같이 특정 확장자 추출할 수 있습니다.

import os

PATH = os.path.dirname(os.path.abspath(__file__))
dir_name = 'data'

for path, dirs, files in os.walk(dir_name):
    dir_path = os.path.join(PATH, path)
    for file in files:
        name, ext = os.path.splitext(file)
        if ext == '.png':
            file_path = os.path.join(dir_path, file)
            print('find file :', file_path)
더보기
find file : c:\Users\Desktop\python\os_\ex8\data\dir_2\dir_2\19.png

 

응용

 

파이썬 파이큐티(PyQT5) 앱 만들기 : 분리수거 - 1

소개 및 기능 분리수거 앱은 폴더를 열어 확장자별로 파일을 분류해주며 이동, 복사, 삭제 기능을 수행할 수 있습니다. 중복된 파일은 따로 폴더를 생성해서 넘버링합니다. 파일 찾기에는 적합��

jvvp.tistory.com