Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python) 파일 삭제 완벽 가이드: os.remove(), os.rmdir(), shutil.rmtree() 활용법

파이썬(Python)을 사용하면 컴퓨터에 저장된 파일과 폴더를 간편하게 삭제할 수 있습니다. 핵심 메서드는 세 가지로 정리할 수 있습니다.

  • os.remove(): 단일 파일을 삭제합니다.
  • os.rmdir(): 빈 디렉터리(폴더)를 삭제합니다.
  • shutil.rmtree(): 하위 파일을 포함한 디렉터리 전체를 삭제합니다.

왜 파일 삭제 기능이 필요한가?

개발자들은 파이썬 프로그램에서 다양한 목적으로 파일을 다룹니다. 그중에서도 파일 삭제는 반드시 알아야 할 핵심 기능 중 하나입니다.

예를 들어 S&P 500 지수의 성과를 분석하고 그 결과를 파일로 저장하는 프로그램을 만든다고 가정해 보겠습니다. 새로운 분석 결과 파일을 저장하기 전에 기존 분석 파일을 먼저 삭제해야 할 수 있습니다.

이처럼 파이썬에서는 os.remove()로 파일을 삭제하고, os.rmdir()로 빈 폴더를 삭제하며, 폴더와 그 안의 모든 파일을 함께 지우고 싶다면 shutil.rmtree()를 사용할 수 있습니다.

이 글에서는 세 가지 메서드의 사용법과 실제 예제를 차근차근 살펴보겠습니다.

1. os.remove()로 파일 삭제하기

os.remove() 메서드는 운영체제에 존재하는 파일 하나를 삭제합니다. 단일 파일만 삭제할 수 있으며, 디렉터리는 삭제할 수 없다는 점에 유의하세요.

os 모듈 임포트하기

os 모듈은 개발자가 운영체제 및 파일 시스템과 상호작용할 수 있게 해주는 표준 라이브러리입니다. 파일을 삭제하려면 먼저 import 문으로 os 라이브러리를 불러와야 합니다.

import os

os.remove() 기본 문법

import os

os.remove(file_location)

os.remove()는 매개변수를 하나만 받습니다. 바로 삭제하려는 파일의 경로입니다.

실전 예제

수학 수업에서 학생들의 성적을 1년 동안 분석하는 프로그램을 만들고 있다고 가정해 보겠습니다. 분석된 데이터를 /home/school/math/final_analysis.csv라는 파일로 저장하려는데, 새 파일을 생성하기 전에 같은 이름의 기존 파일이 존재하지 않는지 확인하고 삭제해야 하는 상황입니다.

이때 다음 코드를 사용할 수 있습니다.

import os

path = "/home/school/math/final_analysis.csv"

os.remove(path)

print("final_analysis.csv has been deleted.")

코드를 실행하면 파일이 삭제되고 콘솔에 아래 메시지가 출력됩니다.

final_analysis.csv has been deleted.

첫 번째 줄에서 프로그램에서 사용할 os.remove() 메서드가 포함된 os 모듈을 임포트합니다. 그다음 삭제하려는 파일의 경로를 저장하는 변수 path를 정의하고, os.remove()에 해당 경로를 전달하여 파일을 삭제합니다.

2. os.rmdir()로 빈 디렉터리 삭제하기

os.remove() 메서드로는 폴더를 삭제할 수 없습니다. 대신 os.rmdir() 메서드를 사용해야 합니다. 이 메서드는 비어 있는 디렉터리를 삭제할 때 사용됩니다.

os.rmdir() 기본 문법

import os

os.rmdir(file_path)

os.rmdir() 역시 매개변수를 하나만 받습니다. 삭제하려는 디렉터리의 경로입니다.

실전 예제

가공된 데이터를 /home/school/math 디렉터리 안의 final이라는 폴더에 저장하기로 했다고 가정해 보겠습니다. 프로그램이 실행될 때마다 새 데이터를 담은 폴더를 새로 생성하므로, 실행 전에 기존의 final 폴더를 삭제해야 합니다.

import os

path = "/home/school/math/final"

os.rmdir(path)

print("/home/school/math/final has been deleted.")

이 코드는 /home/school/math/final 디렉터리를 삭제하고 콘솔에 다음 메시지를 출력합니다.

/home/school/math/final has been deleted.

주의할 점은 os.rmdir()빈 디렉터리만 삭제할 수 있다는 것입니다. 파일이 들어 있는 폴더를 지정하면 다음과 같은 오류가 발생합니다.

[Errno 13] Permission denied: '/home/school/math/final' Directory 'final' can not be removed

try except로 오류 처리하기

위 예제에서 살펴본 것처럼 잘못된 상황에서는 권한 오류가 발생할 수 있습니다. os.remove()로 디렉터리를 삭제하려고 하거나, os.rmdir()로 파일이 있는 디렉터리를 삭제하려고 하면 오류가 반환됩니다.

프로그램에서 파일을 삭제할 때는 오류가 발생했을 때 이를 우아하게 처리하는 로직을 두는 것이 좋습니다. 이럴 때 try except 블록을 활용할 수 있습니다.

앞선 os.rmdir() 예제에 예외 발생 시 미리 정의한 메시지를 출력하는 오류 처리 로직을 추가한 코드입니다.

import os

path = "/home/school/math/final"

try:
	os.rmdir(path)
	print("/home/school/math/final has been deleted.")
except OSError as error:
	print("There was an error.")

오류 없이 정상 실행되면 디렉터리가 삭제되고 다음 메시지가 출력됩니다.

/home/school/math/final has been deleted.

반면 파일이 들어 있는 디렉터리를 삭제하려고 하면 다음 메시지가 출력됩니다.

There was an error.

코드의 동작 방식은 다음과 같습니다. 먼저 try 블록 내부의 코드가 실행되고, 오류가 발생하면 except 블록의 코드가 실행됩니다. 이 예제에서는 OSError가 발생한 경우에만 except 블록이 실행됩니다.

파이썬의 try except를 활용한 오류 처리에 대해 더 자세히 알고 싶다면 관련 튜토리얼을 참고하는 것을 추천합니다.

3. shutil.rmtree()로 파일이 있는 디렉터리 삭제하기

shutil 라이브러리에는 파일이 들어 있는 디렉터리를 통째로 삭제할 수 있는 shutil.rmtree() 메서드가 포함되어 있습니다.

shutil 라이브러리는 파일 작업과 관련된 다양한 함수를 제공합니다. 그중에서 우리가 주목할 것은 디렉터리 트리 전체를 제거하는 shutil.rmtree()입니다.

shutil.rmtree() 기본 문법

import shutil

shutil.rmtree(file_path)

코드에서 shutil 모듈을 임포트하는 것에 유의하세요. shutil.rmtree()os.remove()와 마찬가지로 별도의 라이브러리에 속해 있기 때문에 사용 전에 반드시 임포트해야 합니다.

실전 예제

성적 분석 프로그램에서 final 디렉터리를 삭제해야 하는데, 그 안에 이미 가공된 데이터 파일들이 들어 있는 경우를 생각해 보겠습니다. 디렉터리와 그 안의 모든 파일을 한 번에 삭제하려면 다음 코드를 사용하면 됩니다.

import shutil

path = "/home/school/math/final"

shutil.rmtree(path)

print("/home/school/math/final has been removed.")

이 코드는 final 폴더와 그 안의 모든 내용을 삭제한 뒤, 콘솔에 다음 메시지를 출력합니다.

/home/school/math/final has been removed.

마무리 정리

파일 삭제는 파이썬에서 매우 흔히 사용되는 작업입니다. 핵심을 요약하면 다음과 같습니다.

  • os.remove(): 특정 파일 하나를 삭제할 때 사용합니다.
  • os.rmdir(): 비어 있는 디렉터리를 삭제할 때 사용합니다.
  • shutil.rmtree(): 파일이 하나 이상 들어 있는 폴더를 통째로 삭제할 때 사용합니다.

세 메서드의 차이점을 정확히 이해하고 상황에 맞게 활용한다면, 파일 관리 로직을 더욱 안정적이고 깔끔하게 구현할 수 있습니다.