[파이썬]표준 라이브러리

2024. 8. 11. 20:28PYTHON

random

 

random함수는 난수 생성 및 관련 함수를 제공하는 모듈이다.

특정 범위의 정수나 소수를 가져올 수 있다.

리스트에서 무작위로 선택하는 것도 가능하며, 리스트 요소를 무작위로 섞을 수 있다.

 

import random
#정수 난수 가져오기

random_int = random.randint(1, 10)
print("정수 난수 가져오기 : ", random_int)
#소수 난수 가져오기
random_float = random.random()
print("소수 난수 가져오기 : ", random_float)

정수 난수 가져오기 : 6

소수 난수 가져오기 : 0.5493354042992602

 

 

랜덤 섞기 및 선택

 

shuffle은 리스트를 무작위로 섞는 함수이다. 기존의 리스트를 랜덤으로 섞는다.

choice는 리스트 안의 요소를 무작위로 선택하여 반환한다.

경품 추첨이나 당첨자 선택에 유용하게 쓰이는 함수이다. 

 

import random
products = ['자전거', '과자', '샴푸', '음료수']
#랜덤으로 섞기
random.shuffle(products)
print('무작위로 섞인 리스트 : ', products)

#랜덤으로 선택하기
random_product = random.choice(products)
print('무작위로 선택 : ', random_product)

무작위로 섞인 리스트 : ['음료수', '샴푸', '자전거', '과자'] 무작위로 선택 : 과자

무작위로 선택 : 과자

 

datetime

시간 관련 모듈, 날짜, 시간에 관련된 다양한 클래스와 함수가 있다.

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

현재 날짜와 시간: 2024-08-11 06:19:51.924102

 

날짜 포맷팅

 

날짜 및 시간 데이터는 strtime을 통해 다룰 수 있다.

strtime을 이용해서 %Y에는 연도, %m 은 월, %d는 일, %H, %M, %S는 각각 시간, 분, 초로 그 값을 가져올 수 있다.

날짜 및 시간의 형태를 다르게 표현하고자 할 때 편리하게 이용할 수 있다.

 

from datetime import datetime
current_datetime = datetime.now()
formatted_now = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(current_datetime)
print("현재 날짜 및 시간(형식 지정):", formatted_now)

2024-08-11 06:23:11.231738

현재 날짜 및 시간(형식 지정): 2024-08-11 06:23:11

 

날짜 계산

 

특정 날짜와 특정 날짜 사이의 기간을 계산하려고 할 때는 두 날짜를 빼면 된다.

from datetime import datetime, timedelta
#크리스마스 날짜 생성
christmas = datetime(2023, 12, 25)
#특정 날짜 생성
days_ago = datetime(2023, 9, 16)
#두 날짜 사이의 기간 계산
between_days = christmas - days_ago
#크리스마스로부터 50일 전 계산
fifty_days_ago = christmas - timedelta(days=50)

print('크리스마스', christmas)
print('두 날짜 사이의 간격 :', between_days.days)
print('크리스마스로부터 50일 전 :', fifty_days_ago)

 

크리스마스 2023-12-25 00:00:00

두 날짜 사이의 간격 : 100

크리스마스로부터 50일 전 : 2023-11-05 00:00:00

 

glob

 

파이썬에서 디렉터리를 관리할 때 사용하는 함수.

디렉터리에서 원하는 파일 목록을 가져올 때 유용하다.

파일 목록을 '*.확장자'의 형태로 가져올 수 있다.

 

import glob
#현재 디렉터리에서 모든 파일 목록 얻기
all_files = glob.glob('*')
#현재 디렉터리에서 확장자가 .txt인 파일 목록 얻기
txt_files = glob.glob('*.txt')
print("모든 파일 목록: ", all_files)
print("txt 파일 목록:", txt_files)

모든 파일 목록: ['sample_data']

txt 파일 목록: []

 

pickle

 

파이썬에서 객체를 그대로 저장하는 기술

 

import pickle

# 저장할 객체 생성
data_to_save = {'콜라': 1600, '사이다': 1500, '생수': 1000}
# 객체를 파일에 저장
with open('data.pkl', 'wb') as file:
    pickle.dump(data_to_save, file)

 

data_to_save 딕셔너리를 피클로 저장할 수 있다.

그리고 이렇게 저장한 것은 다시 로드해서 그대로 사용할 수 있다.

 

with open('data.pkl', 'rb') as file:
    loaded_data = pickle.load(file)

print("로드된 데이터:", loaded_data)

 

로드된 데이터: {'콜라': 1600, '사이다': 1500, '생수': 1000}

 

 

JSON(JavaScript Objet Notation)

 

기본적인 JSON 파일 형태.

중괄호로 둘러싸인 데이터 형식.

각각 키-값의 쌍으로 되어 있는 문자열 데이터의 형태이다.

 

{
    "고객정보":[
        {
            "name" : "김마트",
            "age" : 25,
            "phone" : "010-0000-0000"
        }
    ],
    "물품정보":{
        "콜라":{
            "가격": 1600,
            "수량": 10
        },
        "생수": {
            "가격" : 1000,
            "수량" : 20
        }
    }
}

 

위 JSON 데이터는 고객 정보 key 값에 리스트 값을 value로 가지게 된다.

그리고 물품 정보에는 딕셔너리를 value로 가지게 된다.

이렇게 다양한 데이터를 key, value의 형태로 주어지게 되어 필요한 정보를 다룰 수 있게 된다.

기본적으로 JSON 형태의 문자열 데이터로 파이썬 딕셔너리처럼 보이지만 문자열이다.

따라서 파이썬에서 딕셔너리처럼 사용하려면 JSON 형태의 문자열을 파이썬 딕셔너리 데이터로 변환해야 한다.

그리고 필요에 따라 딕셔너리를  JSON 문자열 데이터로 변환할 수 있다.

 

import json

#파이썬 딕셔너리를 JSON 문자열로 변환
data = {'콜라':1600, '사이다':1500, '생수':1000}
json_data = json.dumps(data, ensure_ascii = False)
decoded_data = json.loads(json_data)

print("인코딩:", json_data)
print("디코딩:", decoded_data)

인코딩: {"콜라": 1600, "사이다": 1500, "생수": 1000}

디코딩: {'콜라': 1600, '사이다': 1500, '생수': 1000}

 

json.dumps(data) 함수는 파이썬의 딕셔너리 데이터를 JSON 파일 형식의 문자열로 변환한다.

이때 ensure_asscii = False로 지정하면 문자를 그대로 유지할 수 있도록 설정한다.

json.loads(json_data)는 JSON 파일 형식을 불러들여 파이썬 딕셔너리로 변환하는 역할을 한다.

이렇게 딕셔너리를 문자열로 변환하는 것을 '인코딩'이고, 문자열 데이터를 딕셔너리로 변환하는 것을 '디코딩'이라고 한다.

 

 


파이썬 객체 저장 및 JSON 파일 로드

 

파이썬 객체를 JSON 파일로 저장하고 with open()을 통해 data.json파일을 쓰기 모드로 열게 된다.

그리고 json.dump(data, file)을 통해 data 변수에 할당되어 있는 딕셔너리를 json.dump()를

통해 JSON 파일 형식으로 변환하여 파일에 쓰게 된다.

이렇게 data.json 파일이 생성되고 딕셔너리가 JSON 파일 형식으로 저장된다.

json.load(file)을 통해 저장되어 있는 JSON 파일을 읽어올 수 있다.

 

import json
#파이썬 객체를 파일에 json 형식으로 저장

data = {'콜라': 1600, '사이다': 1500, '생수': 1000}
with open('data.json', 'w') as file:
    json.dump(data, file)

#파일에서 json 데이터를 읽어와 파이썬 객체로 디코딩
with open('data.json', 'r') as file:
    loaded_data = json.load(file)

print('로드된 파이썬 객체:', loaded_data)

로드된 파이썬 객체: {'콜라': 1600, '사이다': 1500, '생수': 1000}

 

re

 

re는 정규 표현식(Regular Expression)을 지원하는 모듈로,

문자열에서 패턴을 찾거나 조작하는데 사용된다.

대표적으로 re.match, re.search, re.findall, re.sub 함수가 많이 사용된다.

re 모듈을 사용하기에 앞서 정규 표현식에 대해 알아야 re를 제대로 사용할 수 있다.

 

정규표현식

정규 표현식은 특정한 규칙을 가진 문자열의 패턴을 표현하는 데 사용되며

문자열에서 원하는 정보를 추출하거나 검색하는 데 유용하다.

정규 표현식의 기본 문법은 크게 패턴 그대로 매칭하는 방법,

특별한 의미를 가진 메타 문자를 활용하여 패턴을 매칭하는 방법,

특정 패턴의 앞이나 뒤에 조건을 지정하여 매치하는 방법으로 나눌 수 있다.

 

^x 문자열 시작을 나타내며 문자 x로 시작되는 것을 의미한다.

^$ 문자열의 끝을 나타내며 문자 x로 끝나는 것을 의미한다.

.x 임의의 한 문자의 자릿수를 표현하며 문자열이 x로 끝나는 것을 의미한다.

X+ 문자가 한 번 이상 반복되는 것을 의미한다.

X? 문자의 존재 여부를 나타내며 문자가 존재할 수도, 존재하지 않을 수도 있다는 것을 의미한다.

X* 문자가 0번 또는 그 이상 반복되는 것을 의미한다.

 

정규 표현식에서 많이 쓰이는 함수

 

re.match(pattern, string) 문자열의 시작 부분부터 패턴이 일치하는지 검사한다.

re.search(pattern, string) 문자열 전체에서 패턴이 일치하는 부분이 있는지 검사한다.

re.findall(pattern, string) 문자열에서 패턴과 일치하는 모든 부분을 찾아 리스트로 반환한다.

re.sub(pattern, repl, string) 문자열에서 패턴과 일치하는 부분을 다른 문자열로 대체한다.

 

 

re.match

 

헤이마트의 상품들은 각각의 고유 코드를 가지고 있다.

각각의 고유 코드를 저장한 문서에서 찾고자 하는 상품을 검색해 보려고 할 때

고유 코드들의 패턴을 나누어서 관리한다면 편리할 수 있다.

예를들어 과자가 snack_1234와 같은 snack으로 분류된 코드를 가지고 있다면, 찾을 때 편리할 수 있다.

 

import re
product_code = 'snack_1234'

if re.match('^snack_\d{4}$', product_code):
    print('유효한 상품 코드입니다.')

else:
    print('유효하지 않은 상품 코드입니다.')

유효한 상품 코드입니다.

 

re.search()

콜라나 그 밖 다른 물건을 찾을 때 문구가 다를 수 있다.

이때 핵심 단어인 '콜라'가 있는지 유무를 판단할 때 좋다.

 

 

import re
user_input = '콜라를 찾고 있어요.'
if re.search('콜라', user_input):
    print('콜라를 찾았습니다. 상품 표시합니다.')

else:
    print('찾으시는 상품이 없습니다.')

콜라를 찾았습니다. 상품 표시합니다.

 

콜라를 찾는다는 사용자의 입력값이 있어서 콜라 상품을 표시할 수 있다.

 
 

re.findall()

상품 설명에서 다양한 숫자 정보를 찾아볼 수 있다.

 

import re
product_description = '콜라 상품은 2500원에 판매되며, 현재 500개가 재고가 있습니다.'
numbers = re.findall('\d+', product_description)
print(f'가격: {numbers[0]}원, 재고: {numbers[1]}개')

가격: 2500원, 재고: 500개

 

re.sub()

상품 설명에서 특정 단어를 다른 단어로 바꿀 수 있다.

예를들어, 상품 정보에 대한 설명을 할 때 기본 템플릿을 설정해 둔 후 물건명만 변경해서 사용할 때 사용할 수 있다.

 

import re
product_description = '상품은(는), 2500원에 판매되며, 현재 500개의 재고가 있습니다.'
new_description = re.sub('상품', '콜라', product_description)
print(new_description)

콜라은(는), 2500원에 판매되며, 현재 500개의 재고가 있습니다.