본문 바로가기

카테고리 없음

파이썬 표준 라이브러리 (random, time, datetime, os, glob)

.py로 끝나는 파일을 모듈이라고 하고, 모듈이 모이면 패키지가 된다. 

그 패키지가 모여 큰 라이브러리가 되는데, 파이썬에서 기본적으로 제공하는 라이브러리가 있다. 

 

아주 강력한 기능을 가진 그러한 라이브러리가 많다. 파일 처리, 시스템 관리, 네트워크 관리, 텍스트 처리, DB관리 등 여러 영역에서 쓸 수 있는 풍부한 기능을 제공한다. 

 

 

 

1. random

random 모듈은 어떤 데이터를 랜덤하게 생성할 때 이용할 수 있다. 임의의 숫자를 생성할 수 있다.

맨처음 불러올 때는, import random 하면된다. 

import random

random.random() 			#임의의 숫자 생성함.

random.randint(10, 100) 	#10에서 100사이의 숫자 중 하나를 임의로 출력함.

items = ['apple', 'banana', 'cherry', 'melon']

random.choice(items)		#저 리스트 안에서 한 개의 요소를 임의로 출력함.

random.sample(items, 2)		#이렇게 하면 임의로 두 개 출력함.

random.shuffle(items)		#items라는 리스트 안에 요소들을 임의로 섞어줌.

 

#random 모듈로 숫자맞추기 게임

 

- 사용자로부터 숫자를 입력받은 후, 

- 1부터 사용자가 입력한 숫자 사이에서 컴퓨터가 random하게 한 숫자를 선택

- 5번의 기회를 주고 유저는 컴퓨터가 뽑은 숫자를 맞추는 게임.

 

 

 

 

num = int(input("숫자를 입력하세요 : (1~100사이)"))
answer_num = random.randint(1, num)			#1부터 유저가 입력한 숫자 사이에서 random숫자 선택
for i in range(5):
    user_num = int(input(f"1에서 {num} 사이의 숫자를 입력하세요 :"))

    #같을 때(정답)
    if answer_num == user_num:
        print("정답을 맞추셨네요 !")
        break		
    #입력한 숫자가 정답보다 클 때
    elif user_num > answer_num:
        print("Down !")
        print(f"{4-i}번의 기회가 남아있습니다.")
    #입력한 숫자가 정답보다 작을 때 
    else:
        print("더 높은 숫자입니다!")
        print(f"{4-i}번의 기회가 남아있습니다.")		#i는 0부터 4까지 5번 출력되니 4부터 뺌

 

 

 


 

 

2. time 

 

time 모듈은 날짜와 시간을 다루는데 사용된다. 현재시간, 미래 시간과의 차이 등등 여러 작업 할 수 있다. 

 

# 현재시간 얻기
import time 
current_time = time.time()
current_time			#코랩에서 실행시 현재시간 출력됨. (epoch 시간 기준 몇초 지났나 뜸)

#이 시간은 epoch 시간이라고 1970년 1월 1일 00:00:00을 기준으로 현재까지의 초로 계산된 시간이다.
#컴퓨터시스템에서 시간을 표현할 때 많이 쓴다.


# 날짜와 시간 형식화
local_time = time.localtime(current_time)
local_time

#time.struct_time(tm_year=2024, tm_mon=2, tm_mday=28, tm_hour=1, tm_min=14, tm_sec=56, tm_wday=2, tm_yday=59, tm_isdst=0)
#이런 결과가 출력된다. 

time.strftime("%Y-%m-%d %H:%M:%S")		#%Y-%m-%d %H:%M:%S 이 형식 그대로 쓰면 됨.
#2024-02-28 01:17:45

 

 

#시스템 가동시간 측정. 개발한 모듈들 작동시간 모니터링, 문제점 발견시 쓰임
start_time = time.time()
time.sleep(2)			#2초 기다림
end_time = time.time()
print("프로그램 실행 시간 : {}".format(end_time-start_time))

#시간을 - 뺀다는 개념을 통해 측정할 수 있음.

 

 

msg = input("시작을 입력하세요 :")
if msg == '시작':
    start_time = time.time()
msg = input("종료를 입력하세요 :")
if msg == '종료':
    end_time = time.time()
print('경과시간은 {}초 입니다.'.format(end_time-start_time))

 

 


 

 

3. datetime

 

날짜와 시간을 다루는 라이브러리. 날짜, 시간정보를 제공함은 물론 날짜에 따른 시간차이도 계산할 수 있다. 

 

from datetime import datetime

#현재시간 가져오기
now = datetime.now()
now

#결과 datetime.datetime(2024, 2, 28, 1, 34, 13, 692826)

 

 

 

now = datetime.now()
now


formatted = now.strftime("%Y-%m-%d %H시%M분%S초")
formatted
# type(formatted)   #> 결과 '2024-02-28 02시14분53초'

# 포매팅 문자의 의미
# - %A: 요일의 전체 이름 (예: Monday, Tuesday).
# - %d: 월의 일자를 두 자리 숫자로 표시 (01부터 31).
# - %B: 월의 전체 이름 (예: December, February).
# - %Y: 네 자리 연도 (예: 2024).
# - %H: 24시간의 시간을 두 자리 숫자로 (00부터 23).
# - %M: 분을 두 자리 숫자로 표시 minute (00부터 59).

 

 

 

#날짜와 시간 차이 계산

#날짜와 시간 차이 계산
from datetime import datetime, timedelta

start_day #멋사 시작한 날.
today = datetime.now()
delta = today - start_day
delta

#결과 datetime.timedelta(days=8, seconds=60323, microseconds=181911)
#날짜, 초, micro초로 경과 시간을 알려준다.

 

#날짜와 시간의 산술연산
one_week_later = now + timedelta(weeks=1)
one_week_later

#timedelta를 통해서 그 다음주 시간을 설정할 수도 있다.

 

근데 지금까지 시간들 보면 다 미국시간을 기준으로 출력된다. 

이것을 한국 시간으로 맞출 수 있을까?? 

 

#시간을 한국으로 맞추고 싶다면?
import pytz

timezone = pytz.timezone("Asia/Seoul")
seoul_time = datetime.now(timezone)
seoul_time

#pytz를 통해서 Asia/Seoul을 입력해주면 된다 !

 

 

 

 

#다음년도 내 생일까지 몇일이나 남았을까? 

생일 날짜를 유저로부터 입력받아서 남은 날짜를 계산해보자.

birthday = input("생일을 입력하세요! : (연-월-일)")
birthday = datetime.strptime(birthday, "%Y-%m-%d")

now_year = datetime.now().year			#현재 몇년도인지
next_birthday = datetime(datetime.now().year+1, birthday.month, birthday.day)
now = datetime.now()

delta = (next_birthday-now).days
print(f"내년 생일은 {delta}일 남았네요")

#delta는 .days를 통해 몇일인지 알려준다.

 

 

 

4. os

현재 작업하고 있는 경로를 조회하거나 폴더나 파일을 지정한 경로에 만들고, 삭제하고 이런거 할 수 있다. 

import os
current_directory = os.getcwd()

이 두줄로 현재 작업하고 있는 경로를 확인할 수 있다. 

 

os.mkdir('new_directory')

현재 위치에 'new_directory'라는 이름으로 폴더를 하나 만들어준다. 

 

.makedirs도 있는데, 이 친구는 중간 디렉토리 없어도 전체 경로를 생성해서 파일 만들어준다. 

os.makedirs('path/to/new_directory')

 

 

#지우는거

os.rmdir("shooting") 

# rmdir로 지울 수 있는데, 폴더 안에 뭐가 들어있으면 못지운다.

import shutil
shutil.rmtree("shooting)
# shutil이용하면 폴더 안에 뭐 있어도 지울 수 있다.
# 강력하니 조심해서 써야한다.

 

#어떤 폴더안에 무슨 파일 있는지 조회

entries = os.listdir("sample_data")		#sample_data라는 폴더 안에
for entry in entries:					#뭐있는지 조회해줌
    print(f"{entry}를 처리")

 

 

 

 

5. glob

# glob
import glob
PATH = "sample_data"            #두 개 경로 합치기 os.path.join(PATH, '*.csv')
glob.glob(os.path.join(PATH, '*.csv'))      #조건걸고 경로에 있는 파일 가져옴

 

os모듈과 glob모듈의 조화가 이루어져 있다. PATH변수에 있는 경로에서 .csv라고 끝나는 이름을 가진 애들의

파일이름을 가져온다. 

#비교
os.listdir(PATH) #전체를 다 가져옴

방금건 조건을 걸었지만, 이렇게 하면 PATH경로에 있는 파일 정보 다 불러온다.

 

 

csv_files = glob.glob(os.path.join(PATH, '**/*.csv'), recursive=True)  #**/* < 모든 디렉토리 포함.
csv_files

모든 디렉토리를 뒤져서 정보를 가져옴.

 

 

dir_path = input("검색할 디렉토리를 적으세요 :")
exp_file = input("검색할 확장자를 적으세요 :")

file_list = glob.glob(os.path.join(dir_path, '*{}'.format(exp_file)))
for file_name in file_list:
    print(file_name)

검색할 주소와 확장자를 줘서 그 안에 있는 친구들 정보 다 불러온다.