[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] 파이썬 list, tuple, dictionary,set 예제 및 총정리
[프로그래밍/Python] – [Python] 파이썬 기본(기초) 문법 : 예제 및 총정리