.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)
검색할 주소와 확장자를 줘서 그 안에 있는 친구들 정보 다 불러온다.