Python

[Python] 파이썬 하위 디렉토리(파일) 검색하는 방법 : os.walk()

os모듈을 import 후 os.walk()함수를 사용하면 하위 디렉토리 안에 있는 모든 파일과 디렉토리 정보를 확인할 수 있습니다. 테스트를 위해 먼저 테스트 경로의 파일 및 디렉토리 정보를 확인하고 갑니다.

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

 C:pythontest 디렉터리

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:pythontest>dir c:pythontestfolder1
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 1C02-20EB

 c:pythontestfolder1 디렉터리

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:pythontest>dir c:pythontestfolder2
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 1C02-20EB

 c:pythontestfolder2 디렉터리

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:pythontest>

 

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

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:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
------------------------------
c:python/test
------------------------------
['folder1', 'folder2']
------------------------------
['newfile.txt', 'sample.txt', '새파일.txt']
------------------------------
c:python/testfolder1
------------------------------
[]
------------------------------
['newfile_22222.txt', 'sample - 복사본.txt', 'sample.txt']
------------------------------
c:python/testfolder2
------------------------------
[]
------------------------------
['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:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
c:python/test <built-in function dir> ['newfile.txt', 'sample.txt', '새파일.txt']
c:python/testfolder1 <built-in function dir> ['newfile_22222.txt', 'sample - 복사본.txt', 'sample.txt']
c:python/testfolder2 <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:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
c:python/test
c:python/test
c:python/testfolder1
c:python/testfolder2

이번에는 모든 디렉토리와 파일의 경로를 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/testnewfile.txt
c:python/testsample.txt
c:python/test새파일.txt
c:python/testfolder1
c:python/testfolder1newfile_22222.txt
c:python/testfolder1sample - 복사본.txt
c:python/testfolder1sample.txt
c:python/testfolder2
c:python/testfolder2android_logo.png
c:python/testfolder2java_logo.png
c:python/testfolder2kotlin_logo.png
c:python/testfolder2newfile.txt
c:python/testfolder2python_logo.png
c:python/testfolder2sample.txt
c:python/testfolder2xbox_logo.png

 

[REFERENCE]

docs.python.org/3/library/os.html?highlight=os%20walk#os.walk

 

[파이썬 더 알아보기]

[프로그래밍/Python] – [Python] 파이썬 디렉토리 및 파일 전체를 복사 또는 일괄 삭제하는 방법shutil.copytree(), shutil.rmtree()

[프로그래밍/Python] – [Python] 파이썬 파일 및 디렉토리(폴더) 삭제방법 : 파일, 디렉토리 무조건 삭제 하는 방법 : shutil , os

[프로그래밍/Python] – [Python] 파이썬 파일(디렉토리)처리 총정리: 경로 확인,경로 변경, 파일이름 변경

[프로그래밍/Python] – [Python] 파이썬 랜덤 숫자 뽑기 난수 발생(random) 예제 총정리 : randint(), randrange(), uniform(), shuffle(), choice(), choices(), simple()

[프로그래밍/Python] – [Python] 파이썬 list, tuple, dictionary,set 예제 및 총정리

 [프로그래밍/Python] – [Python] 파이썬 문자열 함수 사용 예제 및 총정리 : split,join,replace,rstrip,lstrip,lower,upper,index,count,len

[프로그래밍/Python] – [Python] 파이썬 기본(기초) 문법 : 예제 및 총정리

 

Leave a Reply

error: Content is protected !!