프로그래밍/Python

파이썬 표준 라이브러리 활용: `datetime`, `os`, `sys` 모듈

shimdh 2025. 2. 21. 10:47
728x90

파이썬은 다양한 표준 라이브러리를 제공하여 개발자들이 효율적으로 작업할 수 있도록 도와줍니다. 이번 포스트에서는 datetime, os, sys 모듈을 중심으로 각 모듈의 주요 기능과 활용 방법을 자세히 알아보겠습니다. 각 모듈은 날짜와 시간 관리, 운영 체제와의 상호작용, 시스템 정보 및 프로그램 흐름 제어 등 다양한 작업을 수행하는 데 유용합니다. 이 글에서는 각 모듈의 기능을 깊이 있게 다루고, 실제 프로젝트에서 어떻게 활용할 수 있는지 예제를 통해 설명하겠습니다.


1. datetime 모듈: 날짜와 시간 관리

datetime 모듈은 날짜와 시간을 다루는 데 필수적인 기능을 제공합니다. 이를 통해 날짜 생성, 조작, 포맷팅 등을 쉽게 할 수 있습니다. 이 모듈은 로그 기록, 이벤트 스케줄링, 데이터 분석 등 다양한 분야에서 활용됩니다.

1.1 기본 구성 요소

  • datetime 클래스: 날짜와 시간을 모두 포함하는 객체입니다.
  • date 클래스: 연도, 월, 일 정보를 가진 객체입니다.
  • time 클래스: 시, 분, 초 및 마이크로초 정보를 가진 객체입니다.
  • timedelta 클래스: 두 날짜 또는 시간 간의 차이를 나타내는 객체입니다.

1.2 주요 기능

1.2.1 현재 날짜와 시간 가져오기

import datetime

# 현재 날짜와 시간
now = datetime.datetime.now()
print("현재 날짜와 시간:", now)

1.2.2 특정 날짜 만들기

# 특정 날짜 생성 (2023년 10월 5일)
specific_date = datetime.date(2023, 10, 5)
print("특정 날짜:", specific_date)

1.2.3 timedelta를 사용한 날짜 계산

# 오늘부터 일주일 후의 날짜 계산하기
today = datetime.date.today()
one_week_later = today + datetime.timedelta(weeks=1)
print("오늘부터 일주일 후:", one_week_later)

# 하루 전날 계산
yesterday = today - datetime.timedelta(days=1)
print("어제:", yesterday)

1.2.4 날짜 및 시간 형식화

# 형식 지정하여 출력하기 (YYYY-MM-DD 형식으로 변환)
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print("형식화된 현재 시간:", formatted_date)

# 다른 형식 예시 (DD/MM/YYYY)
formatted_custom_date = now.strftime("%d/%m/%Y")
print("다른 형식화된 현재 시간:", formatted_custom_date)

1.2.5 문자열에서 날짜 객체로 변환

date_string = "2023-10-05"
converted_date = datetime.datetime.strptime(date_string, "%Y-%m-%d")
print("문자열에서 변환한 date 객체:", converted_date)

# 다시 문자열로 변환하기 
string_from_datetime = converted_date.strftime("%d/%m/%Y")
print("변환한 문자열:", string_from_datetime)

1.2.6 날짜 비교 및 차이 계산

# 두 날짜 비교
date1 = datetime.date(2023, 10, 5)
date2 = datetime.date(2023, 10, 10)
if date1 < date2:
    print(f"{date1}은 {date2}보다 이전입니다.")

# 날짜 차이 계산
date_diff = date2 - date1
print(f"두 날짜의 차이: {date_diff.days}일")

1.2.7 시간대 처리

from datetime import datetime, timezone, timedelta

# UTC 시간 가져오기
utc_now = datetime.now(timezone.utc)
print("현재 UTC 시간:", utc_now)

# 시간대 변환 (UTC -> KST)
kst_now = utc_now.astimezone(timezone(timedelta(hours=9)))
print("현재 KST 시간:", kst_now)

2. os 모듈: 운영 체제와의 상호작용

os 모듈은 파일 및 디렉토리 작업, 환경 변수 관리, 프로세스 제어 등 운영 체제와 상호작용하는 데 유용합니다. 이 모듈은 시스템 관리, 파일 처리, 환경 설정 등 다양한 작업에 활용됩니다.

2.1 파일 및 디렉토리 작업

2.1.1 디렉토리 생성 및 삭제

import os

# 'new_directory'라는 이름의 새 디렉토리 생성
os.mkdir('new_directory')

# 'new_directory'라는 이름의 빈 디렉토리 삭제
os.rmdir('new_directory')

2.1.2 현재 작업 디렉토리 확인

# 현재 작업 중인 경로 출력
current_path = os.getcwd()
print("현재 경로:", current_path)

2.1.3 파일 목록 가져오기

# 현재 경로 내의 모든 항목 나열
items = os.listdir('.')
print("현재 경로 내 항목들:", items)

2.1.4 파일 및 디렉토리 존재 여부 확인

# 파일 존재 여부 확인
if os.path.isfile('example.txt'):
    print("example.txt 파일이 존재합니다.")

# 디렉토리 존재 여부 확인
if os.path.isdir('new_directory'):
    print("new_directory 디렉토리가 존재합니다.")

2.2 환경 변수 관리

2.2.1 환경 변수 조회

# PATH 환경 변수 출력
path_variable = os.environ.get('PATH')
print("PATH:", path_variable)

2.2.2 환경 변수 설정

# MY_ENV_VAR이라는 새로운 환경 변수 설정
os.environ['MY_ENV_VAR'] = 'my_value'
print("MY_ENV_VAR:", os.environ.get('MY_ENV_VAR'))

2.3 프로세스 제어

# ls 명령어 실행 (Unix 계열)
exit_code = os.system('ls')
print("명령어 종료 코드:", exit_code)

2.4 파일 경로 조작

# 파일 경로 조합
file_path = os.path.join('folder', 'subfolder', 'file.txt')
print("조합된 파일 경로:", file_path)

# 파일 경로 분할
dir_name, file_name = os.path.split(file_path)
print("디렉토리 이름:", dir_name)
print("파일 이름:", file_name)

2.5 파일 및 디렉토리 권한 관리

# 파일 권한 변경 (읽기, 쓰기, 실행 권한 부여)
os.chmod('example.txt', 0o755)
print("example.txt 파일 권한 변경 완료.")

# 디렉토리 권한 변경
os.chmod('new_directory', 0o755)
print("new_directory 디렉토리 권한 변경 완료.")

3. sys 모듈: 시스템 정보 및 프로그램 흐름 제어

sys 모듈은 파이썬 인터프리터와 관련된 기능을 제공하며, 명령줄 인수 처리, 모듈 경로 관리, 프로그램 종료 등을 할 수 있습니다. 이 모듈은 스크립트 자동화, 디버깅, 시스템 정보 확인 등에 유용합니다.

3.1 주요 기능

3.1.1 명령줄 인수 처리

import sys

# 전달된 명령줄 인수 출력
print("전달된 명령줄 인수:")
for arg in sys.argv:
    print(arg)

3.1.2 파이썬 버전 정보

# 현재 파이썬 버전 출력
print("현재 파이썬 버전:", sys.version)

3.1.3 모듈 경로 관리

# 현재 모듈 검색 경로 출력
print("현재 모듈 검색 경로:")
for path in sys.path:
    print(path)

# 새로운 경로 추가
sys.path.append('/my/custom/path')

3.1.4 프로그램 종료

# 인수가 없을 경우 프로그램 종료
if len(sys.argv) < 2:
    print("사용법: python script.py <argument>")
    sys.exit(1)  # 비정상 종료 코드

3.2 실용적인 사용 사례

3.2.1 스크립트 자동화

import os
import sys

# 파일 처리 스크립트
if len(sys.argv) < 2:
    print("사용법: python process_files.py <file1> <file2> ...")
    exit()

for filename in sys.argv[1:]:
    if os.path.isfile(filename):
        with open(filename, 'r') as file:
            content = file.read()
            # 파일 처리 로직 추가
            print(f"{filename} 읽기 완료.")

3.2.2 디버깅 및 로그 관리

import sys

# 기본 stdout 변경 (예시)
original_stdout = sys.stdout 

with open('log.txt', 'w') as f:
    # 모든 출력을 log.txt 파일에 기록
    sys.stdout = f  
    print('로그 시작')

# 원래 stdout 복원 
sys.stdout = original_stdout  
print('로그가 log.txt에 저장되었습니다.')

3.2.3 시스템 정보 확인

import sys

# 시스템 플랫폼 정보 출력
print("시스템 플랫폼:", sys.platform)

# 파이썬 실행 파일 경로 출력
print("파이썬 실행 파일 경로:", sys.executable)

3.2.4 메모리 사용량 확인

import sys

# 객체의 메모리 사용량 확인
my_list = [i for i in range(10000)]
print(f"리스트의 메모리 사용량: {sys.getsizeof(my_list)} 바이트")

결론

datetime, os, sys 모듈은 파이썬 프로그래밍에서 매우 중요한 역할을 합니다. 각 모듈은 날짜와 시간 관리, 운영 체제와의 상호작용, 시스템 정보 및 프로그램 흐름 제어 등 다양한 작업을 수행하는 데 유용합니다. 이러한 모듈을 활용하면 더 효율적이고 강력한 스크립트를 작성할 수 있습니다. 실제 프로젝트에서도 이러한 기능들을 적절히 활용한다면 더욱 효과적이고 편리한 코드를 만들 수 있을 것입니다!

추가 활용 예제

1. 로그 파일에 타임스탬프 추가

import datetime
import os

# 로그 파일에 현재 시간 기록
log_file = 'log.txt'
with open(log_file, 'a') as f:
    now = datetime.datetime.now()
    f.write(f"[{now}] 새로운 로그 항목 추가\n")

2. 파일 백업 스크립트

import os
import shutil
import sys

# 백업할 파일 경로
source_file = sys.argv[1]
backup_file = source_file + '.bak'

# 파일 백업
if os.path.isfile(source_file):
    shutil.copy(source_file, backup_file)
    print(f"{source_file} 파일이 {backup_file}로 백업되었습니다.")
else:
    print(f"{source_file} 파일이 존재하지 않습니다.")

3. 환경 변수를 이용한 설정 관리

import os

# 환경 변수에서 설정 값 읽기
db_host = os.environ.get('DB_HOST', 'localhost')
db_port = os.environ.get('DB_PORT', '5432')

print(f"데이터베이스 연결 정보: {db_host}:{db_port}")

4. 파일 크기 확인 및 정리

import os

# 특정 디렉토리 내 파일 크기 확인 및 정리
target_dir = 'data'
for filename in os.listdir(target_dir):
    file_path = os.path.join(target_dir, filename)
    if os.path.isfile(file_path):
        file_size = os.path.getsize(file_path)
        print(f"{filename}: {file_size} 바이트")
        if file_size > 1024 * 1024:  # 1MB 이상 파일 삭제
            os.remove(file_path)
            print(f"{filename} 파일이 삭제되었습니다.")

5. 프로그램 실행 시간 측정

import sys
import time

# 프로그램 실행 시간 측정
start_time = time.time()

# 시간이 걸리는 작업 예시
for i in range(1000000):
    pass

end_time = time.time()
elapsed_time = end_time - start_time
print(f"프로그램 실행 시간: {elapsed_time:.2f} 초")

이처럼 datetime, os, sys 모듈은 다양한 상황에서 유용하게 사용될 수 있습니다. 각 모듈의 기능을 잘 이해하고 활용한다면, 파이썬 프로그래밍의 효율성을 크게 높일 수 있습니다.

728x90