[Python] 파이썬 파일 및 디렉토리(폴더) 삭제방법 : 파일, 디렉토리 무조건 삭제 하는 방법 : shutil , os
파이썬에서 파일과 디렉토리를 삭제하는 방법에 대해 알아봅니다.
shutil 모듈을 import 하여 사용하면 쉽게 처리할 수 있습니다. 파일 및 디렉토리에 접근하기 위해 os모듈도 함께 import 해야합니다. rmtree()함수를 사용하여 폴더를 삭제하는 경우 폴더(디렉토리)안에 파일도 함께 모두 삭제처리합니다. 아래 코드 스니펫은 test폴더 안에 파일과 폴더를 임시로 생성 후 일괄 삭제 처리를 해보았습니다.
■파일과 디렉토리(폴더)를 무조건 동시에 삭제 처리 하는 방법
import shutil
import os
print('-'*20)
file_list = os.listdir("C:/python/test")
print(file_list)
print('-'*20)
shutil.rmtree("C:/python/test")
file_list = os.listdir("C:/python/test")
print(file_list)
#실행결과
C:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
--------------------
['folder_1', 'newfile.txt', 'sample.txt', '새파일.txt']
--------------------
Traceback (most recent call last):
File "C:pythonWorkspacemain.py", line 10, in <module>
file_list = os.listdir("C:/python/test")
FileNotFoundError: [WinError 3] 지정된 경로를 찾을 수 없습니다: 'C:/python/test'
삭제완료 후 이미 삭제된 리스트를 print문으로 찍으려고 하니 “지정된 경로를 찾을 수 없습니다” 라는 오류가 노출됩니다. 삭제가 잘 되었다는 뜻이지요.
■파일만 삭제하는 방법 : os.remove()함수를 사용하여 처리합니다. os.splitext()함수를 사용하면 확장자가를 지정하여 해당 확장자를 가진 모든 파일의 삭제가 가능합니다.
import os
print('-'*30)
file_list = os.listdir("C:/python/test/folder1")
print(file_list)
print('-'*30)
os.remove("C:/python/test/folder1/java_logo.png")
file_list = os.listdir("C:/python/test/folder1")
print(file_list)
#실행결과
C:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
------------------------------
['android_logo.png', 'kotlin_logo.png', 'newfile.txt', 'python_logo.png', 'sample.txt', 'xbox_logo.png']
------------------------------
Traceback (most recent call last):
File "C:pythonWorkspacemain.py", line 8, in <module>
os.remove("C:/python/test/folder1/java_logo.png")
FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다: 'C:/python/test/folder1/java_logo.png'
Process finished with exit code 1
다음은 확장자가 png인 모든 파일을 삭제하는 예제 코드입니다. splitex()함수를 사용하여 파일명과 확장자를 분리 후 확장자를 기준으로 조건문을 만들고 삭제대상이 된다면 join()함수를 사용하여 파일경로와 파일명을 연결합니니다. 그리고 난후 remove()함수를 사용하여 삭제를 진행합니다. 실행결과 삭제 후 모든 png파일은 삭제되고 txt파일만 남아 있음을 확인할 수 있습니다.
import os
print('-'*30)
file_list = os.listdir("C:/python/test/folder1")
print(file_list)
print('-'*30)
for file in file_list:
filename, file_extension = os.path.splitext(file)
print("파일명 :", file, " 확장자 :", file_extension)
if file_extension == '.png':
file_path = os.path.join("C:/python/test/folder1", file)
print("파일경로와파일명 조합 :", file_path)
os.remove(file_path)
print('-'*30)
file_list = os.listdir("C:/python/test/folder1")
print(file_list)
print('-'*30)
#실행결과
C:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
------------------------------
['android_logo.png', 'kotlin_logo.png', 'newfile.txt', 'python_logo.png', 'sample.txt', 'xbox_logo.png']
------------------------------
파일명 : android_logo.png 확장자 : .png
파일경로와파일명 조합 : C:/python/test/folder1android_logo.png
파일명 : kotlin_logo.png 확장자 : .png
파일경로와파일명 조합 : C:/python/test/folder1kotlin_logo.png
파일명 : newfile.txt 확장자 : .txt
파일명 : python_logo.png 확장자 : .png
파일경로와파일명 조합 : C:/python/test/folder1python_logo.png
파일명 : sample.txt 확장자 : .txt
파일명 : xbox_logo.png 확장자 : .png
파일경로와파일명 조합 : C:/python/test/folder1xbox_logo.png
------------------------------
['newfile.txt', 'sample.txt']
------------------------------
Process finished with exit code 0
*.png는 먹히지 않네요.
os.remove("C:/python/test/folder1/*.png")
#실행결과
File "C:pythonWorkspacemain.py", line 8, in <module>
os.remove("C:/python/test/folder1/*.png")
OSError: [WinError 123] 파일 이름, 디렉터리 이름 또는 볼륨 레이블 구문이 잘못되었습니다:
'C:/python/test/folder1/*.png'
■디렉토리만 삭제하는 방법 : os.removedirs()함수를 사용하거나 os.rmdir()함수를 사용하여 처리합니다. 단, 예외 사항이 있습니다. 디렉토리에 파일이 존재하는 경우 삭제되지않고 오류가 발생합니다.
import os
print('-'*30)
file_list = os.listdir("C:/python/test/folder1")
print(file_list)
print('-'*30)
os.removedirs("C:/python/test/folder1")
#os.rmdir("C:/python/test/folder2")
#실행결과
C:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
------------------------------
['android_logo.png', 'java_logo.png', 'kotlin_logo.png', 'newfile.txt', 'python_logo.png', 'sample.txt', 'xbox_logo.png']
------------------------------
Traceback (most recent call last):
File "C:pythonWorkspacemain.py", line 8, in <module>
os.removedirs("C:/python/test/folder1")
File "C:UsersilikeAppDataLocalProgramsPythonPython39libos.py", line 243, in removedirs
rmdir(name)
OSError: [WinError 145] 디렉터리가 비어 있지 않습니다: 'C:/python/test/folder1'
[REFERENCE]
docs.python.org/3/library/shutil.html?highlight=rmtree#shutil.rmtree
docs.python.org/3/library/os.html?highlight=os%20remove#os.removedirs
docs.python.org/3/library/os.html?highlight=os%20remove#os.remove
docs.python.org/3/library/os.html?highlight=os%20rmdir#os.rmdir
[파이썬 더 알아보기]
[프로그래밍/Python] – [Python] 파이썬 기본(기초) 문법 : 예제 및 총정리
[프로그래밍/Python] – [Python] 파이썬 list, tuple, dictionary,set 예제 및 총정리
[프로그래밍/Python] – [Python] 파이썬 클래스(class) 와 생성자(__init__) 사용방법 및 예제 총정리
[프로그래밍/Python] – [Python] 파이썬 __name__ == ‘__main__’의 사용 목적
[프로그래밍/Python] – [Python] 파이썬 self를 인자로 받는 함수(Method)와 그렇지 않은 함수(메소드)의 차이점