파이썬에서 파일 또는 폴더 삭제하기
파이썬에서 파일이나 폴더를 삭제하는 것은 os
모듈을 사용하여 간단하게 수행할 수 있습니다. os
모듈은 운영 체제와 상호 작용하는 다양한 기능을 제공하며, 파일 시스템을 조작하는 데 유용합니다.
단일 파일 삭제하기
os.remove()
함수:- 지정된 파일을 삭제합니다.
- 파일이 존재하지 않으면
FileNotFoundError
예외가 발생합니다.
import os
file_path = "파일의 절대 경로 또는 상대 경로"
os.remove(file_path)
pathlib.Path.unlink()
메서드:pathlib
모듈은 파일 시스템의 경로를 나타내는 객체를 제공합니다.unlink()
메서드는 파일을 삭제합니다.
from pathlib import Path
file_path = Path("파일의 절대 경로 또는 상대 경로")
file_path.unlink()
빈 폴더 삭제하기
os.rmdir()
함수:- 폴더가 비어 있지 않으면
OSError
예외가 발생합니다.
- 폴더가 비어 있지 않으면
import os
folder_path = "빈 폴더의 절대 경로 또는 상대 경로"
os.rmdir(folder_path)
비어 있지 않은 폴더 삭제하기
비어 있지 않은 폴더를 삭제하려면 먼저 폴더 내의 모든 파일과 하위 폴더를 재귀적으로 삭제해야 합니다. 이를 위해 shutil
모듈의 rmtree()
함수를 사용할 수 있습니다.
import shutil
folder_path = "삭제할 폴더의 절대 경로 또는 상대 경로"
shutil.rmtree(folder_path)
주의: shutil.rmtree()
함수는 매우 강력하며, 지정된 폴더와 그 하위 폴더에 있는 모든 파일을 삭제합니다. 실수로 중요한 데이터를 삭제하지 않도록 주의해야 합니다.
예시
import os
import shutil
# 파일 삭제
os.remove("temp/old_file.txt")
# 빈 폴더 삭제
os.rmdir("temp/empty_folder")
# 비어 있지 않은 폴더 삭제 (주의: 모든 내용이 삭제됩니다)
shutil.rmtree("temp/data")
추가 고려 사항
- 경로: 파일 또는 폴더의 정확한 경로를 지정해야 합니다. 절대 경로 또는 상대 경로를 사용할 수 있습니다.
- 에러 처리: 파일 또는 폴더가 존재하지 않거나 삭제할 수 없는 경우 예외가 발생할 수 있습니다.
try-except
블록을 사용하여 예외를 처리하는 것이 좋습니다. - 권한: 파일 또는 폴더를 삭제하려면 해당 파일 또는 폴더에 대한 쓰기 권한이 있어야 합니다.
- 보안: 사용자 입력을 기반으로 파일 또는 폴더를 삭제할 때는 보안 문제를 고려해야 합니다. 사용자 입력을 적절하게 검증하여 디렉토리 트래버설 공격 등을 방지해야 합니다.
더 자세한 정보:
- 파이썬 공식 문서:
os
모듈,pathlib
모듈,shutil
모듈에 대한 자세한 내용은 파이썬 공식 문서를 참고하세요. - 온라인 튜토리얼: 파이썬 파일 입출력 관련 다양한 튜토리얼을 찾아볼 수 있습니다.
파이썬으로 파일 및 폴더 삭제하는 실제 코드 예시
단일 파일 삭제하기
import os
# 삭제할 파일 경로
file_path = "C:/Users/YourName/Documents/old_data.txt"
try:
os.remove(file_path)
print("파일이 성공적으로 삭제되었습니다.")
except FileNotFoundError:
print("파일이 존재하지 않습니다.")
except PermissionError:
print("파일 삭제 권한이 없습니다.")
빈 폴더 삭제하기
import os
# 삭제할 빈 폴더 경로
folder_path = "C:/Users/YourName/temp"
try:
os.rmdir(folder_path)
print("빈 폴더가 성공적으로 삭제되었습니다.")
except FileNotFoundError:
print("폴더가 존재하지 않습니다.")
except OSError:
print("폴더가 비어 있지 않습니다.")
비어 있지 않은 폴더 삭제하기 (주의: 모든 내용 삭제)
import shutil
# 삭제할 폴더 경로
folder_path = "C:/Users/YourName/project"
try:
shutil.rmtree(folder_path)
print("폴더와 모든 하위 항목이 성공적으로 삭제되었습니다.")
except FileNotFoundError:
print("폴더가 존재하지 않습니다.")
except PermissionError:
print("폴더 삭제 권한이 없습니다.")
pathlib
모듈 사용 예시
from pathlib import Path
# 삭제할 파일 경로
file_path = Path("data/old_file.txt")
try:
file_path.unlink()
print("파일이 성공적으로 삭제되었습니다.")
except FileNotFoundError:
print("파일이 존재하지 않습니다.")
주요 포인트
- 경로: 정확한 파일 또는 폴더 경로를 지정해야 합니다.
- 에러 처리:
try-except
블록을 사용하여 예외를 처리하고, 사용자에게 알림을 제공합니다. - 권한: 파일 또는 폴더에 대한 쓰기 권한이 필요합니다.
shutil.rmtree()
: 비어 있지 않은 폴더를 삭제할 때 사용하며, 매우 강력하므로 주의해야 합니다.pathlib
: 객체 지향적인 방식으로 파일 시스템을 다루는 데 유용합니다.
추가 설명
- 절대 경로: 드라이브 루트부터 시작하는 경로 (예:
C:/Users/YourName/Documents
) - 상대 경로: 현재 작업 디렉토리를 기준으로 하는 경로 (예:
data/old_file.txt
) FileNotFoundError
: 지정된 파일 또는 폴더가 존재하지 않을 때 발생PermissionError
: 파일 또는 폴더에 대한 접근 권한이 없을 때 발생OSError
: 폴더가 비어 있지 않을 때os.rmdir()
함수에서 발생
주의사항
- 백업: 중요한 데이터는 반드시 백업 후 삭제 작업을 진행해야 합니다.
- 실수 방지: 잘못된 경로를 지정하여 중요한 데이터를 실수로 삭제하지 않도록 주의해야 합니다.
- 보안: 사용자 입력을 기반으로 파일 또는 폴더를 삭제할 때는 보안 문제를 고려해야 합니다.
- "특정 확장자를 가진 파일만 선택적으로 삭제하려면 어떻게 해야 하나요?"
- "특정 폴더 아래에 있는 모든 파일을 다른 폴더로 이동하려면 어떻게 해야 하나요?"
- "파일 수정 시간을 기준으로 파일을 삭제하려면 어떻게 해야 하나요?"
파이썬에서 파일 또는 폴더 삭제하는 다른 방법들
이미 os
모듈과 shutil
모듈을 이용한 파일 및 폴더 삭제 방법에 대해 알아보았습니다. 하지만 파이썬은 다양한 방식으로 이 작업을 수행할 수 있도록 풍부한 라이브러리들을 제공합니다. 여기에서는 좀 더 복잡하거나 특수한 경우에 유용하게 활용할 수 있는 다른 방법들을 소개하겠습니다.
pathlib 모듈을 활용한 더 객체 지향적인 접근
pathlib
모듈은 파일 시스템의 경로를 객체로 취급하여 더욱 직관적이고 객체 지향적인 방식으로 파일 시스템을 조작할 수 있도록 해줍니다.
from pathlib import Path
# 삭제할 파일 경로
file_path = Path("data/old_file.txt")
# 파일 존재 여부 확인 후 삭제
if file_path.exists():
file_path.unlink()
print("파일이 성공적으로 삭제되었습니다.")
else:
print("파일이 존재하지 않습니다.")
glob 모듈을 활용한 패턴 기반 파일 삭제
glob
모듈은 파일 이름 패턴을 사용하여 여러 파일을 한꺼번에 선택할 수 있도록 해줍니다.
import glob
import os
# 확장자가 .txt인 모든 파일 삭제
for file in glob.glob("*.txt"):
os.remove(file)
os.walk() 함수를 활용한 디렉토리 트리 순회 및 삭제
os.walk()
함수는 디렉토리 트리를 순회하면서 각 디렉토리의 루트 디렉토리, 디렉토리 목록, 파일 목록을 제공합니다. 이를 이용하여 특정 조건에 맞는 파일이나 폴더를 선택적으로 삭제할 수 있습니다.
import os
def delete_files_by_size(directory, min_size):
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
if os.path.getsize(file_path) > min_size:
os.remove(file_path)
print(f"삭제된 파일: {file_path}")
# 10MB 이상의 파일 삭제
delete_files_by_size("data", 10 * 1024 * 1024)
send2trash 모듈을 활용한 휴지통으로 이동
send2trash
모듈은 파일을 실제로 삭제하는 대신 휴지통으로 이동시켜 실수로 인한 데이터 손실을 방지할 수 있도록 해줍니다.
import send2trash
# 휴지통으로 이동
send2trash.send2trash("data/old_file.txt")
외부 라이브러리 활용
fire
: 명령줄 인터페이스를 쉽게 만들 수 있도록 도와주는 라이브러리입니다.click
: 명령줄 인터페이스를 만드는 또 다른 강력한 라이브러리입니다.
선택 기준
- 간단한 파일 삭제:
os.remove()
또는pathlib.Path.unlink()
- 객체 지향적인 접근:
pathlib
- 패턴 기반 파일 선택:
glob
- 디렉토리 트리 순회:
os.walk()
- 휴지통으로 이동:
send2trash
- 명령줄 인터페이스:
fire
,click
- 사용자 입력:
inquirer
어떤 방법을 선택할지는 다음과 같은 요소들을 고려하여 결정해야 합니다.
- 삭제할 파일의 수와 종류: 많은 파일을 한꺼번에 삭제해야 하는 경우
glob
이나os.walk()
를 사용하는 것이 효율적일 수 있습니다. - 파일 시스템 조작의 복잡성:
pathlib
는 더 복잡한 파일 시스템 조작을 수행하는 데 유용합니다. - 오류 처리: 예외 처리를 통해 프로그램의 안정성을 높일 수 있습니다.
python file-io directory