[Python] 파일과 디렉토리 관리
소개
os 모듈의 개요
Python의 os
모듈은 운영 체제(Operating System)와 상호 작용하기 위한 다양한 기능을 제공합니다. 파일 시스템을 포함해 운영 체제와 관련된 다양한 작업을 수행하는 데 사용됩니다. 이 모듈은 파일을 생성, 삭제, 이동 및 이름 변경과 같은 기본적인 파일 관리부터 시작해, 파일의 속성을 확인하고, 사용자의 환경변수 접근, 현재 작업 디렉터리 변경 등의 다양한 기능을 포함하고 있습니다.
파일 관리를 위해 os 모듈이 필요한 이유
파일 관리는 운영 체제의 핵심적인 부분입니다. 프로그램은 데이터를 저장하고 처리하기 위해 파일과 폴더(디렉터리)를 생성하고, 수정하고, 이동합니다. Python에서는 이러한 파일 관리 작업을 위해 내장되어 있는 os
모듈을 제공합니다.
os
모듈을 사용하는 주된 이유는 Python 코드를 운영 체제 독립적으로 만들 수 있다는 점입니다. 예를 들어, 파일 경로를 생성할 때 Windows는 "\"를 사용하는 반면, UNIX와 MacOS는 "/"를 사용합니다. os
모듈을 사용하면 이러한 차이점을 신경 쓸 필요 없이 코드를 작성할 수 있습니다. os.path
서브 모듈은 플랫폼 간 호환 가능한 방식으로 파일 경로를 처리하는데 도움을 줍니다.
os
모듈은 파일을 삭제하거나 이름을 바꾸는 등의 작업을 위한 명확하고 직관적인 함수를 제공합니다. 예를 들어, os.remove()
함수는 파일을 삭제하는 데 사용되며, os.rename()
함수는 파일의 이름을 변경하는 데 사용됩니다. 이러한 기능들은 파일 관리를 필요로 하는 어떤 Python 프로그램에서나 필수적입니다.
예시 코드
다음은 os
모듈을 사용하여 일련의 파일 관리 작업을 수행하는 간단한 예시입니다:
import os
# 현재 작업 디렉터리 출력
print(f"현재 작업 디렉터리: {os.getcwd()}")
# 새 디렉터리 생성
os.mkdir("new_directory")
# 파일 이름 변경
os.rename("old_name.txt", "new_name.txt")
# 파일 삭제
os.remove("unnecessary_file.txt")
# 작업 디렉터리 변경
os.chdir("new_directory")
print(f"현재 작업 디렉터리: {os.getcwd()}")
이 예시처럼, os
모듈을 사용함으로써 운영 체제의 파일 시스템에 쉽게 접근하여 파일 또는 디렉터리를 관리할 수 있습니다. 이는 데이터 저장, 데이터 처리, 시스템 관리 작업 등 프로그래밍의 많은 부분에서 필수적인 기능입니다.
Python에서 파일 시스템을 관리하는 작업은 os
모듈을 통해 할 수 있습니다. 특히 파일이나 디렉터리(폴더)를 삭제하는 기능은 파일 시스템 관리에서 매우 중요한 부분을 차지합니다. 다음은 os
모듈을 사용하여 파일과 디렉터리를 삭제하는 방법에 대한 세부 지침입니다.
파일 삭제하기
파일을 삭제하는 기본적인 방법은 os.remove()
함수를 사용하는 것입니다.
os.remove() 함수의 사용법
os.remove()
함수는 지정된 경로에 있는 파일을 삭제합니다. 파일이 존재하지 않을 경우 FileNotFoundError
예외가 발생합니다.
import os
# 파일 경로
file_path = 'example.txt'
# 파일이 존재하는지 체크 후 삭제
if os.path.isfile(file_path):
os.remove(file_path)
print(f'{file_path} 파일이 삭제되었습니다.')
else:
print(f'{file_path} 파일이 존재하지 않습니다.')
삭제 가능한 파일 확인하기
위 코드에서 볼 수 있듯이, 파일을 삭제하기 전에 파일이 실제로 존재하는지 확인하는 것이 좋습니다. os.path.isfile()
함수를 사용하여 파일이 존재하는지 여부를 확인할 수 있습니다.
디렉터리(폴더) 삭제하기
디렉터리를 삭제하는 것은 파일을 삭제하는 것보다 약간 복잡합니다. Python에서는 os.rmdir()
및 os.removedirs()
함수를 제공합니다.
os.rmdir() 함수의 사용법
os.rmdir()
함수는 비어 있는 디렉터리를 삭제합니다. 디렉터리가 비어있지 않을 경우 OSError
예외가 발생합니다. 따라서 디렉터리를 삭제하기 전에 디렉터리가 비어 있는지 확인해야 합니다.
import os
# 디렉터리 경로
dir_path = 'example_dir'
# 비어 있는 디렉터리 삭제
try:
os.rmdir(dir_path)
print(f'{dir_path} 디렉터리가 삭제되었습니다.')
except OSError as e:
print(f'{e}')
os.removedirs() 함수의 사용법
os.removedirs()
함수는 비어 있는 디렉터리를 순차적으로 삭제합니다. 만약 지정된 경로의 중간 디렉터리가 비어 있지 않다면, 해당 지점에서 삭제 작업이 중단됩니다.
import os
# 중첩된 디렉터리 경로
nested_dir_path = 'dir1/dir2/dir3'
# 중첩된 비어 있는 디렉터리 삭제
os.removedirs(nested_dir_path)
print(f'{nested_dir_path} 디렉터리가 삭제되었습니다.')
비어있지 않은 디렉터리 삭제하기
비어 있지 않은 디렉터리를 삭제하기 위해서는 먼저 디렉터리 내의 모든 파일과 하위 디렉터리를 재귀적으로 삭제한 후, 상위 디렉터리를 삭제해야 합니다. 이런 작업을 수행하는 것은 os
모듈만으로는 복잡할 수 있으므로, shutil
모듈의 rmtree()
함수를 대신 사용하는 것이 좋습니다.
import shutil
# 디렉터리 경로
dir_path = 'non_empty_dir'
# 비어있지 않은 디렉터리 삭제
shutil.rmtree(dir_path)
print(f'{dir_path} 디렉터리가 삭제되었습니다.')
shutil.rmtree()
함수는 주어진 디렉터리와 그 안의 모든 내용을 삭제합니다. os
모듈을 사용할 때와 마찬가지로, 실제로 필요한 경우에만 사용해야 합니다.
파일과 디렉터리를 삭제할 때는 신중을 기하여 중요한 데이터를 잃지 않도록 주의해야 합니다.
파일과 디렉터리(폴더)의 이름을 변경하는 것은 파일 관리에서 중요한 작업 중 하나입니다. Python에서는 os
모듈에 있는 rename()
함수를 통해 이를 수행할 수 있습니다. 이 함수는 기본적으로 두 가지 매개변수를 갖습니다; 바꿀 대상의 현재 이름과 새로운 이름입니다.
파일 이름 변경하기
파일의 이름을 변경하기 위해서는 우선 os
모듈을 임포트해야 합니다. 그 다음, os.rename()
함수를 사용하여 파일 이름을 변경할 수 있습니다. 예를 들어, 현재 디렉터리에 있는 'old_name.txt'라는 파일의 이름을 'new_name.txt'로 변경하는 코드는 다음과 같습니다.
import os
# 파일 이름 변경
os.rename('old_name.txt', 'new_name.txt')
이 코드를 실행하면 'old_name.txt'라는 파일이 'new_name.txt'로 이름이 변경됩니다. 파일을 변경할 때, 파일 경로를 포함시켜 정확한 위치의 파일 이름을 변경할 수 있습니다.
디렉터리 이름 변경하기
디렉터리의 이름을 변경하는 방법도 파일 이름을 변경하는 방법과 매우 유사합니다. os.rename()
함수를 사용하여 동일하게 진행할 수 있습니다. 기존 디렉터리의 이름을 변경하고자 할 때, 해당 디렉터리에 대한 정확한 경로를 제공하면 됩니다.
예를 들어, 'old_dir'라는 디렉터리의 이름을 'new_dir'로 변경하려면 다음과 같이 할 수 있습니다.
import os
# 디렉터리 이름 변경
os.rename('old_dir', 'new_dir')
이 경우에도 파일 이름을 변경할 때와 마찬가지로 디렉터리의 경로를 명시할 수 있습니다. 이를 통해 다른 디렉터리에 있는 디렉터리의 이름을 변경할 수도 있습니다.
코드를 실행하기 전에는, 변경하려는 파일 또는 디렉터리가 실제로 존재하는지, 그리고 변경 후의 이름이 이미 사용 중이지 않은지 확인하는 것이 중요합니다. 존재하지 않는 파일 또는 디렉터리의 이름을 변경하려고 시도하거나, 이미 존재하는 이름으로 변경을 시도할 경우 FileNotFoundError
혹은 OSError
가 발생할 수 있습니다.
Python의 os 모듈을 사용한 파일 및 디렉터리의 관리는 이처럼 간단하면서도 강력한 기능을 제공합니다. 파일 시스템을 프로그램적으로 조작할 수 있게 하여, 다양한 자동화 작업을 가능하게 합니다.
파일 및 디렉터리 정보를 확인하고 관리하는 것은 프로그래밍에서 매우 중요한 부분입니다. Python에서는 이러한 작업을 수행하기 위해 os
모듈과 os.path
서브 모듈을 제공합니다. 이 섹션에서는 파일의 존재 여부, 파일 크기, 그리고 파일의 수정 시간을 확인하는 방법에 대해 알아보겠습니다.
파일 존재 여부 확인하기
파일 또는 디렉터리가 실제로 존재하는지 확인하는 것은 파일작업을 시작하기 전 필수적인 단계입니다. 이를 확인하기 위해 os.path.exists()
함수를 사용할 수 있습니다. 이 함수는 지정한 경로에 파일 또는 디렉터리가 존재하면 True를, 그렇지 않으면 False를 반환합니다.
사용방법 예시:
import os
# 파일 또는 디렉터리의 경로
file_path = 'example.txt'
directory_path = 'example_directory'
# 파일 존재 여부 확인
if os.path.exists(file_path):
print(f"'{file_path}' exists.")
else:
print(f"'{file_path}' does not exist.")
# 디렉터리 존재 여부 확인
if os.path.exists(directory_path):
print(f"'{directory_path}' exists.")
else:
print(f"'{directory_path}' does not exist.")
파일 크기 확인하기
파일의 크기를 확인하는 것도 종종 필요한 작업입니다. 이를 위해 os.path.getsize()
함수를 사용할 수 있으며, 이 함수는 파일의 크기를 바이트 단위로 반환합니다.
사용방법 예시:
import os
file_path = 'example.txt'
# 파일 크기 확인
file_size = os.path.getsize(file_path)
print(f"The size of '{file_path}' is {file_size} bytes.")
파일의 수정 시간 확인하기
파일의 마지막 수정 시간을 확인하는 것은 파일이 언제 업데이트 되었는지 알아내는데 유용합니다. os.path.getmtime()
함수를 사용하여 파일의 마지막 수정 시간을 확인할 수 있습니다. 이 함수는 해당 파일의 마지막 수정 시간을 나타내는 타임스탬프를 반환합니다. 반환된 타임스탬프는 datetime
모듈을 사용하여 보다 친숙한 날짜와 시간 형태로 변환할 수 있습니다.
사용방법 예시:
import os
import datetime
file_path = 'example.txt'
# 파일의 마지막 수정 시간 가져오기
modification_time = os.path.getmtime(file_path)
# 타임스탬프를 datetime 객체로 변환
modification_datetime = datetime.datetime.fromtimestamp(modification_time)
print(f"The last modification time of '{file_path}' was {modification_datetime}.")
이렇게 파일이나 디렉터리에 관한 다양한 정보를 확인하는 방법을 알아보았습니다. 이 기능들은 파일 시스템을 다룰 때 필수적인 기능들이므로, 이를 통해 파일 관리 작업을 보다 효율적으로 수행할 수 있습니다.
디렉터리 관리는 파일 시스템에서 매우 중요한 부분입니다. Python의 os 모듈은 파일 및 디렉터리를 쉽게 관리할 수 있는 유용한 기능들을 제공합니다. 여기서는 os
모듈을 사용하여 현재 작업 디렉터리를 확인하고 변경하는 방법, 새로운 디렉터리를 생성하는 방법, 그리고 디렉터리 내의 파일 및 서브 디렉터리 목록을 얻는 방법에 대해 다룰 것입니다.
현재 작업 디렉터리 확인 및 변경하기
- 현재 작업 디렉터리를 확인하려면
os.getcwd()
를 사용합니다. 이 함수는 현재 작업 디렉터리의 절대 경로를 문자열로 반환합니다.
import os
current_directory = os.getcwd()
print(f"현재 작업 디렉터리: {current_directory}")
- 작업 디렉터리를 변경하고 싶은 경우에는
os.chdir()
함수를 사용합니다. 인자로 변경하고자 하는 디렉터리의 경로를 전달해줍니다.
import os
new_directory = "/path/to/directory"
os.chdir(new_directory)
print(f"현재 작업 디렉터리가 '{new_directory}'로 변경되었습니다.")
새 디렉터리 생성하기
- 단일 디렉터리를 생성하고자 할 때는
os.mkdir()
함수를 사용합니다. 이 함수는 디렉터리가 이미 존재하는 경우FileExistsError
오류를 발생시킵니다.
import os
directory = "new_directory"
try:
os.mkdir(directory)
print(f"'{directory}' 디렉터리가 생성되었습니다.")
except FileExistsError:
print(f"디렉터리 '{directory}'는 이미 존재합니다.")
- 여러 디렉터리(경로)를 중첩해서 생성하고 싶을 때는
os.makedirs()
함수를 사용합니다. 이미 존재하는 디렉터리는 오류를 발생시키지 않고 건너뛰며, 필요한 디렉터리만 생성합니다.
import os
nested_directories = "dir1/dir2/dir3"
os.makedirs(nested_directories, exist_ok=True)
print(f"'{nested_directories}' 경로의 디렉터리들이 생성되었습니다.")
디렉터리 내 파일 및 서브 디렉터리 목록 얻기
- 디렉터리 내의 파일 및 서브 디렉터리 목록을 얻고자 할 때는
os.listdir()
함수를 사용합니다. 인자로 경로를 지정하지 않으면, 현재 작업 디렉터리 내의 파일과 디렉터리 목록을 반환합니다.
import os
contents = os.listdir()
print("현재 디렉터리 내의 파일 및 서브 디렉터리 목록:")
for item in contents:
print(item)
이러한 os
모듈의 함수들을 활용하면, 파일 시스템에서의 디렉터리 관리 작업을 효율적으로 수행할 수 있습니다.
경로 처리
파이썬에서 파일 및 디렉터리와 관련된 다양한 작업을 수행하기 위해 os
모듈이 제공됩니다. 특히 경로 처리는 파일 시스템을 다룰 때 굉장히 중요한 부분입니다. 여기에는 파일의 절대 경로 얻기, 경로의 구성 요소 분리, 파일 확장자 분리 등이 포함됩니다. 이들을 사용하여 파일과 디렉터리에 대한 경로를 더욱 유연하게 다룰 수 있습니다.
절대 경로 얻기
절대 경로는 파일 시스템 내에서 파일이나 디렉터리의 전체 경로를 말합니다. 상대 경로와 달리, 절대 경로는 항상 같은 파일이나 디렉터리를 가리킵니다.
import os
# 현재 작업 디렉터리의 상대 경로
relative_path = 'my_folder/my_file.txt'
# 상대 경로를 절대 경로로 변환
absolute_path = os.path.abspath(relative_path)
print(f"절대 경로: {absolute_path}")
이 코드는 현재 작업 디렉터리에 위치한 my_folder/my_file.txt
의 절대 경로를 반환합니다.
경로 구성 요소 분리
파일 시스템 경로는 일반적으로 디렉터리와 파일 이름으로 구성되며, 이들을 분리해야 할 경우가 종종 있습니다.
import os
# 파일의 절대 경로
file_path = '/home/user/my_folder/my_file.txt'
# 경로 구성 요소 분리
dir_name, file_name = os.path.split(file_path)
print(f"디렉터리: {dir_name}")
print(f"파일 이름: {file_name}")
os.path.split()
함수는 주어진 경로를 디렉터리 부분과 파일 이름 부분으로 분리하여 반환합니다.
파일 확장자 분리
파일 경로에서 파일 이름과 확장자를 분리해야 할 때가 있습니다. 이 때 os.path.splitext()
함수를 사용합니다.
import os
# 파일의 절대 경로
file_path = '/home/user/my_folder/my_file.txt'
# 파일 이름과 확장자 분리
file_name, file_extension = os.path.splitext(file_path)
print(f"파일 이름: {file_name}")
print(f"확장자: {file_extension}")
이 함수는 파일 경로를 입력으로 받아 파일 이름과 확장자를 분리하여 반환합니다. 이를 통해 확장자를 쉽게 변경하거나, 특정 확장자를 가진 파일을 처리하는 작업을 보다 쉽게 할 수 있습니다.
이처럼 os
모듈의 다양한 함수들을 활용하여, 경로 관련 작업을 효율적으로 처리할 수 있습니다.