카테고리 없음

[Python] 자주 사용되는 모듈/패턴

kinggoddino 2024. 11. 19.

 type( )   :  값의 자료형 확인하기

 변수에 담긴 값들이 어떤 자료형인지 알 수 있음.

integer = 10
float_ = 1.23
string = "hello world!!"
list_ = [1, 2, 3]
tuple_ = (1, 2, 3)
set_ = {1, 2, 3}
dictionary = {"key": "value"}
boolean = True

print(type(integer))    # <class 'int'>
print(type(float_))     # <class 'float'>
print(type(string))     # <class 'str'>
print(type(list_))      # <class 'list'>
print(type(tuple_))     # <class 'tuple'>
print(type(set_))       # <class 'set'>
print(type(dictionary)) # <class 'dict'>
print(type(boolean))    # <class 'bool'>

 
특히, 결과값으로 받아온 숫자가 어떤 형태인지(정수형인지 문자형인지) 확인할 때 유용함

a = 1
b = "1"

print(a, type(a))   # 1 <class 'int'>
print(b, type(b))   # 1 <class 'str'>

 


 

 split( )   :  string을 list로 변환하기

특정 문자를 기준으로 문자열을 쪼갤 수 있음.

# split은 string.split("구분자")로 구성되어 있습니다.

string = "hello/python/world!!"
string_list = string.split("/") # split() 안에 들어간 값을 기준으로 문자를 나눈다.

print(string_list) # ['hello', 'python', 'world!!']

 

 

 join( )   :  list를 string으로 변환하기

split 과 반대로 특정 문자를 기준으로 문자열을 연결해줌.

# join은 "사이에 들어갈 문자".join(리스트) 로 구성되어 있습니다.

string_list = ["hello", "python", "world"]
string = "!! ".join(string_list)

print(string) # hello!! python!! world

 


 

 replace( )   :  문자열 바꾸기

특정 문자를 내가 원하는 문자로 바꿔줌.

# replace는 "변경할 문자".replace("변경 전 문자", "변경 후 문자")로 구성되어 있습니다.

before_string = "hello world!!!"
after_string = before_string.replace("!", "~") # !를 ~로 변경

print(after_string) # hello world~~~

 


 

 pprint( )   :  코드 예쁘게 출력하기

pprint는 pretty print의 약자이고, 데이터를 더 예쁘게 출력해줌.

 

예시

더보기

# 예시

sample_data = {
    "id": "0001",
    "type": "donut",
    "name": "Cake",
    "ppu": 0.55,
    "batters":
        {
            "batter":
                [
                    {"id": "1001", "type": "Regular"},
                    {"id": "1002", "type": "Chocolate"},
                    {"id": "1003", "type": "Blueberry"},
                    {"id": "1004", "type": "Devil's Food"}
                ]
        },
    "topping":
        [
            {"id": "5001", "type": "None"},
            {"id": "5002", "type": "Glazed"},
            {"id": "5005", "type": "Sugar"},
            {"id": "5007", "type": "Powdered Sugar"},
            {"id": "5006", "type": "Chocolate with Sprinkles"},
            {"id": "5003", "type": "Chocolate"},
            {"id": "5004", "type": "Maple"}
        ]
}

 
예시 출력 비교

일반 print 출력일 경우

print(sample_data)
더보기

{'id': '0001', 'type': 'donut', 'name': 'Cake', 'ppu': 0.55, 'batters': {'batter': [{'id': '1001', 'type': 'Regular'}, {'id': '1002', 'type': 'Chocolate'}, {'id': '1003', 'type': 'Blueberry'}, {'id': '1004', 'type': "Devil's Food"}]}, 'topping': [{'id': '5001', 'type': 'None'}, {'id': '5002', 'type': 'Glazed'}, {'id': '5005', 'type': 'Sugar'}, {'id': '5007', 'type': 'Powdered Sugar'}, {'id': '5006', 'type': 'Chocolate with Sprinkles'}, {'id': '5003', 'type': 'Chocolate'}, {'id': '5004', 'type': 'Maple'}]}print(sample_data)

pprint 출력일 경우

(모듈 import 해줘야함)

from pprint import pprint
pprint(sample_data)
더보기

{'batters': {'batter': [{'id': '1001', 'type': 'Regular'},
                              {'id': '1002', 'type': 'Chocolate'},

                              {'id': '1003', 'type': 'Blueberry'},

                              {'id': '1004', 'type': "Devil's Food"}]},
 'id': '0001',
 'name': 'Cake',
 'ppu': 0.55,
 'topping': [{'id': '5001', 'type': 'None'},
                 {'id': '5002', 'type': 'Glazed'},
                 {'id': '5005', 'type': 'Sugar'},
                 {'id': '5007', 'type': 'Powdered Sugar'},      
                 {'id': '5006', 'type': 'Chocolate with Sprinkles'},
                 {'id': '5003', 'type': 'Chocolate'},
                 {'id': '5004', 'type': 'Maple'}],
 'type': 'donut'}

 

결과를 보면
딕셔너리, 리스트의 구분이 뚜렷하고 데이터마다 개행도 시켜주고 인덴트도 맞춰서 출력해준다.
변수에 많은 양의 데이터가 담겨있을 때 내용을 깔끔하게 보고싶으면 사용함
 


 

 random   :  랜덤한 로직 만들기

이름처럼 임의의 숫자를 생성하거나 무작위의 동작이 필요할 때 사용한다
코드를 실행할 때마다 결과값이 달라진다.
shuffle (리스트 안의 요소를 섞기)
randint (random integer 의 약자, 무작위 숫자라는 뜻)

# 난수 생성, 임의의 번호 생성 등 랜덤한 동작이 필요할 때 사용
import random

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(numbers) # numbers를 무작위하게 섞기
print(numbers) # [2, 8, 6, 4, 3, 7, 1, 5]

random_number = random.randint(1, 10) # 1 ~ 10 사이의 무작위 번호 생성
print(random_number) # 4

 


 

 time   :  시간 다루기

코드의 실행속도를 측정하거나, 코드를 잠시 중지시킬 때 사용

import time

start_time = time.time() # 현재 시간 저장

time.sleep(1) # 1초간 대기

end_time = time.time()

# 코드가 종료된 시간 - 코드가 시작된 시간으로 실행 시간 구하기 (단위 : 초)
print(f"코드 실행 시간 : {end_time-start_time:.5f}") # 코드 실행 시간 : 1.00018

.5f 는 소수점 5째 자리 수까지 표기하겠다는 뜻임.
 

 datetime   :  날짜 다루기

현재 날짜 및 시각 출력해보기

from datetime import datetime

print(datetime.now()) # 2023-02-22 15:55:32.277095

 
datetime은 string 이 아니라 datetime 클래스임.

print(datetime.now())  # 2024-11-19 06:39:03.326788

now = datetime.now()
now = now.split(" ")   # 공백 기준으로 나누기 시도
# AttributeError: 'datetime.datetime' object has no attribute 'split'

# 에러 발생 이유
print(type(now))   # <class 'datetime.datetime'>

 

 

datetime 을 string 으로 변경하는 법

now = str(datetime.now())  # 문자열로 형변환 해주기
print(now.split(" "))      # ['2024-11-19', '06:44:59.605220']

 

strptime(입력받을 날짜 변수, 변경할 문자열의 포맷)

# datetime 날짜를 string으로 변환하기
now = datetime.now()
string_datetime = datetime.strftime(now, "%y/%m/%d %H:%M:%S")
print(string_datetime) # 22/09/04 04:04

 

 

반대로 string 을 datetime 으로 변경하는 법
strptime(입력받을 문자열 변수, 입력받은 문자열의 포맷)

# string을 datetime 날짜로 변경하기
string_datetime = "23/12/25 13:20"
datetime_ = datetime.strptime(string_datetime, "%y/%m/%d %H:%M")
print(datetime_) # 2023-12-25 13:20:00

 

 

포맷 종류

'''
%y : 두 자리 연도 / 20, 21, 22
%Y : 네 자리 연도 / 2020, 2021, 2022
%m : 두 자리 월 / 01, 02 ... 11 ,12
%d : 두 자리 일 / 01, 02 ...  30, 31
%I : 12시간제 시간 / 01, 02 ... 12
%H : 24시간제의 시간 / 00, 01 ... 23
%M : 두 자리 분 / 00, 01 ... 58, 59
%S : 두 자리 초 / 00, 01 ... 58, 59
'''

 
datetime의 format code 더 제세한건 여기서 확인 가능
https://docs.python.org/ko/3/library/datetime.html#strftime-and-strptime-format-codes

 

datetime — Basic date and time types

Source code: Lib/datetime.py The datetime module supplies classes for manipulating dates and times. While date and time arithmetic is supported, the focus of the implementation is on efficient attr...

docs.python.org

 

 

 timedelta 

특정 날짜를 더하거나 뺄 때 사용함
사용하는 방법은 사칙연산이랑 비슷함

from datetime import timedelta

# 3일 전 날짜 구하기
three_days_ago = datetime.now() - timedelta(days=3)
print(three_days_ago) # 2023-02-19 16:27:52.526502