Python

[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] 파이썬 문자열 함수 사용 예제 및 총정리 : split,join,replace,rstrip,lstrip,lower,upper,index,count,len

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

[프로그래밍/Python] – [Python] 파이썬 클래스(class) 와 생성자(__init__) 사용방법 및 예제 총정리

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

[프로그래밍/Python] – [Python] 파이썬 __name__ == ‘__main__’의 사용 목적

[프로그래밍/Python] – [Python] 파이썬 self를 인자로 받는 함수(Method)와 그렇지 않은 함수(메소드)의 차이점

 

Leave a Reply

error: Content is protected !!