[파이썬] os.walk()함수를 사용하여 하위 디렉토리(파일) 를 검색하는 방법에 대해 알아보자

[파이썬] os.walk()함수를 사용하여 하위 디렉토리(파일) 를 검색하는 방법에 대해 알아보자

os모듈을 import 후 os.walk()함수를 사용하면 하위 디렉토리 안에 있는 모든 파일과 디렉토리 정보를 확인할 수 있습니다. 

테스트를 위해 먼저 테스트 경로의 파일 및 디렉토리 정보를 확인하고 갑니다.

C:\python\test>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 1C02-20EB

 C:\python\test 디렉터리

2020-12-07  오전 09:50    <DIR>          .
2020-12-07  오전 09:50    <DIR>          ..
2020-12-07  오전 10:16    <DIR>          folder1
2020-12-07  오전 09:47    <DIR>          folder2
2020-12-01  오후 02:38               277 newfile.txt
2020-12-01  오후 02:38               277 sample.txt
2020-12-01  오후 02:38               277 새파일.txt
               3개 파일                 831 바이트
               4개 디렉터리  25,219,117,056 바이트 남음

C:\python\test>dir c:\python\test\folder1
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 1C02-20EB

 c:\python\test\folder1 디렉터리

2020-12-07  오전 10:16    <DIR>          .
2020-12-07  오전 10:16    <DIR>          ..
2020-12-01  오후 02:38               277 newfile_22222.txt
2020-12-01  오후 02:38               277 sample - 복사본.txt
2020-12-01  오후 02:38               277 sample.txt
               3개 파일                 831 바이트
               2개 디렉터리  25,219,117,056 바이트 남음

C:\python\test>dir c:\python\test\folder2
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 1C02-20EB

 c:\python\test\folder2 디렉터리

2020-12-07  오전 09:47    <DIR>          .
2020-12-07  오전 09:47    <DIR>          ..
2020-11-30  오후 04:50            24,130 android_logo.png
2020-11-30  오후 04:48            85,872 java_logo.png
2020-11-30  오후 04:52            24,091 kotlin_logo.png
2020-12-01  오후 02:38               277 newfile.txt
2020-11-30  오후 03:01            42,100 python_logo.png
2020-12-01  오후 02:38               277 sample.txt
2020-11-30  오후 05:15            77,462 xbox_logo.png
               7개 파일             254,209 바이트
               2개 디렉터리  25,219,117,056 바이트 남음

C:\python\test>

테스트를 진행할 경로는 c:\python\test 입니다.

for문으로 os.walk() 결과값을 받기위해 3개의 변수를 대입합니다. 3개의 데이터를 전달받을 수 있기때문입니다.

각각 경로 정보와 디렉토리정보 그리고 파일 정보를 받을 수 있습니다.

import os

for path, dirs, files in os.walk("c:\python/test"):
    #print(path, dir, files)
    print('-' * 30)
    print(path)
    print('-' * 30)
    print(dirs)
    print('-' * 30)
    print(files)


#실행결과
C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/main.py
------------------------------
c:\python/test
------------------------------
['folder1', 'folder2']
------------------------------
['newfile.txt', 'sample.txt', '새파일.txt']
------------------------------
c:\python/test\folder1
------------------------------
[]
------------------------------
['newfile_22222.txt', 'sample - 복사본.txt', 'sample.txt']
------------------------------
c:\python/test\folder2
------------------------------
[]
------------------------------
['android_logo.png', 'java_logo.png', 'kotlin_logo.png', 'newfile.txt', 'python_logo.png', 'sample.txt', 'xbox_logo.png']
import os

for path, dirs, files in os.walk("c:\python/test"):
    print(path, dir, files)


#실행결과
C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/main.py
c:\python/test <built-in function dir> ['newfile.txt', 'sample.txt', '새파일.txt']
c:\python/test\folder1 <built-in function dir> ['newfile_22222.txt', 'sample - 복사본.txt', 'sample.txt']
c:\python/test\folder2 <built-in function dir> ['android_logo.png', 'java_logo.png', 'kotlin_logo.png', 'newfile.txt', 'python_logo.png', 'sample.txt', 'xbox_logo.png']

Process finished with exit code 0

os.path.join() 함수를 사용하여 경로 정보를 연결하여 결합한 결과를 얻을 수 있습니다.

import os

path2 = os.path.dirname("c:\python/test/")
print(path2)
for path, dirs, files in os.walk(path2):
    print(os.path.join(path2, path))
    

#실행결과
C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/main.py
c:\python/test
c:\python/test
c:\python/test\folder1
c:\python/test\folder2

이번에는 모든 디렉토리와 파일의 경로를 os.path.join()함수를 사용하여 출력해봅니다.

import os

path2 = os.path.dirname("c:\python/test/")
print(path2)
for path, dirs, files in os.walk(path2):
    print(os.path.join(path2, path))
    for file in files:
        file_path = os.path.join(path, file)
        print(file_path)
        
        
#실행결과
c:\python/test
c:\python/test
c:\python/test\newfile.txt
c:\python/test\sample.txt
c:\python/test\새파일.txt
c:\python/test\folder1
c:\python/test\folder1\newfile_22222.txt
c:\python/test\folder1\sample - 복사본.txt
c:\python/test\folder1\sample.txt
c:\python/test\folder2
c:\python/test\folder2\android_logo.png
c:\python/test\folder2\java_logo.png
c:\python/test\folder2\kotlin_logo.png
c:\python/test\folder2\newfile.txt
c:\python/test\folder2\python_logo.png
c:\python/test\folder2\sample.txt
c:\python/test\folder2\xbox_logo.png

카테고리의 다른 글
error: Content is protected !!