일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- String
- Servlet
- 함수
- 프론트엔드
- Method
- 웹
- java
- 데이터베이스
- JavaScript
- Python
- 자바스크립트
- web
- HTML
- jsp
- 서블릿
- frontend
- Database
- 메소드
- 문자열
- It
- 오라클
- oracle
- 자바
- 코딩
- PL/SQL
- Programming
- SQL
- 파이썬
- function
- 프로그래밍
- Today
- Total
Untitled_Blue
[Python] 라이브러리 본문
안녕하세요. 이번 글은 라이브러리에 대한 설명입니다.
- 라이브러리 (Library)
- 표준 라이브러리와 외부 라이브러리로 구성되어 있다.
- 표준 라이브러리는 파이썬 설치 시 기본적으로 같이 제공하는 라이브러리
- 외부 라이브러리는 표준과 다르게 pip 도구를 사용하여 설치해야 하는 라이브러리
import datetime
a = datetime.date(2024, 2, 12)
b = datetime.date(2024, 1, 1)
print(a - b) # 42 days, 0:00:00
print((a - b).days) # 42
print(datetime.date(2024, 2, 12).weekday()) # 0
print(datetime.date(2024, 2, 12).isoweekday()) # 1
print(datetime.date(2024, 2, 13).today()) # 2024-02-12
print(datetime.date(2024, 2, 12).ctime()) # Mon Feb 12 00:00:00 2024
- datetime : 날짜를 표현할 때 사용하는 라이브러리
- datetime.date(year, month, day) : 날짜를 표현하고 활용하기 위한 메서드
- datetime.date(year, month, day).weekday() : 날짜 내 요일을 숫자로 반환해주는 메서드 (0부터 월요일을 표현함)
- datetime.date(year, month, day).isoweekday() : 날짜 내 요일을 1부터 월요일을 표현하는 메서드
- datetime.date(year, month, day).today() : 현재 날짜를 표현하는 메서드
- datetime.date(year, month, day).ctime() : 날짜를 미국 표기법 기준으로 표현해주는 메서드
import time
print(time.time()) # 1707737968.4038312
print(time.localtime()) # time.struct_time(tm_year=2024, tm_mon=2, tm_mday=12, tm_hour=20, tm_min=39, tm_sec=28, tm_wday=0, tm_yday=43, tm_isdst=0)
print(time.localtime().tm_year) # 2024
print(time.localtime().tm_mon) # 2
print(time.localtime().tm_mday) # 12
print(time.asctime()) # Mon Feb 12 20:40:57 2024
print(time.ctime()) # Mon Feb 12 20:40:57 2024
print(time.strftime('%a %A , %b %B, %c, %d %D', time.localtime(time.time()))) # Mon Monday , Feb February, Mon Feb 12 20:46:56 2024, 12 02/12/24
print(time.strftime('%H, %I', time.localtime(time.time()))) # 20, 08
print(time.strftime('%j, %m, %M, %p', time.localtime(time.time()))) # 043, 02, 46, PM
- time : 날짜와 시간을 다루는 라이브러리
- time.time() : 현재 시간을 UTC를 기반으로 1970년 1월 1일을 시작으로 하는 누적되는 초를 반환하는 메서드
- time.localtime() : 현재 시간을 구조적으로 표현해주는 메서드
- time.asctime(), time.ctime() : 현재 시간을 미국 시간 표기법으로 반환하는 메서드
- time.strftime('[format]', time.localtime(time.time())) : 날짜와 시간을 세부적으로 표현 및 활용할 수 있는 메서드
포맷형식 | 설명 |
%a, %A | 요일의 약어 및 풀네임 |
%b, %B | 월의 약어 및 풀네임 |
%c | 날짜와 시간 출력 |
%d | 1일부터 31일까지의 일자 |
%H, %I | 몇시인지를 출력 (24시간제, 12시간제) |
%j | 1년 중 누적 날짜 (1월1일을 기준으로 몇일째인지 출력) |
%p | AM/PM 출력 |
%m | 1월부터 12월까지의 월 숫자 출력 |
%M | 몇 분인지를 숫자로 출력 |
%S | 초 출력 |
%U | 1년 중 누적 주차 (일요일을 시작으로 1월1일을 기준으로 몇주째인지를 출력) |
%w | 요일을 숫자로 출력 (0부터 일요일 6까지 토요일) |
%W | 1년 중 누적 주차 (월요일을 시작으로 1월1일을 기준으로 몇주째인지를 출력) |
%x, %X | 현재 지역 기준으로 날짜, 시간 출력 |
%Y | 연도 출력 |
%Z | 시간대 출력 |
import time
for i in range(10):
print(i + 1)
time.sleep(1)
다음 코드를 실행해보면 JAVA나 C#를 공부해본 사람이라면 쓰레드(Thread)를 생각할 것이다. 그렇다. 해당 부분은 쓰레드에서 봤던 .sleep() 부분을 파이썬에서 time 라이브러리를 통해 구현할 수 있다는 점을 확인할 수 있는 코드이다. 해당 코드를 실행해보면 time.sleep(sec)를 활용해서 설정해둔 초시간을 기반으로 순차적으로 내부 코드가 실행된다는 점을 확인할 수 있다.
import math
import random
print(math.gcd(60, 48)) # 12
print(math.lcm(60, 48)) # 240
print(random.random())
print(random.randint(1, 10))
print(random.choice([1,2,3,4,5]))
print(random.sample([1,2,3,4,5], 3))
상단의 코드는 수학 관련 라이브러리인 math와 랜덤 기능을 구현해주는 random 라이브러리이다.
- math.gcd(a, b) : 두 수의 최대공약수를 구하는 함수
- math.lcm(a, b) : 두 수의 최소공배수를 구하는 함수
- random.random() : 소수로서 랜덤된 숫자 결과를 보여주는 함수
- random.randint(a, b) : 두 수 사이의 범위에서 숫자 하나를 무작위로 보여주는 함수
- random.choice([List]) : 리스트 사이에서 무작위로 하나의 값을 보여주는 함수
- random.sample([List], a) : 리스트 사이에서 정한 갯수만큼 무작위로 보여주는 함수
import itertools
members = ['박초롱', '윤보미', '정은지', '김남주', '오하영']
drinks = ['아메리카노', '자몽허니블랙티', '바닐라라떼']
# [('박초롱', '아메리카노'), ('윤보미', '자몽허니블랙티'), ('정은지', '바닐라라떼')]
result = zip(members, drinks)
print(list(result))
# [('박초롱', '아메리카노'), ('윤보미', '자몽허니블랙티'), ('정은지', '바닐라라떼'), ('김남주', '카페모카'), ('오하영', '카페모카')]
result = itertools.zip_longest(members, drinks, fillvalue='카페모카')
print(list(result))
"""
[('아메리카노', '자몽허니블랙티', '바닐라라떼'),
('아메리카노', '바닐라라떼', '자몽허니블랙티'),
('자몽허니블랙티', '아메리카노', '바닐라라떼'),
('자몽허니블랙티', '바닐라라떼', '아메리카노'),
('바닐라라떼', '아메리카노', '자몽허니블랙티'),
('바닐라라떼', '자몽허니블랙티', '아메리카노')]
"""
result = itertools.permutations(drinks, 3)
print(list(result))
"""
[('아메리카노', '자몽허니블랙티'),
('아메리카노', '바닐라라떼'),
('자몽허니블랙티', '바닐라라떼')]
"""
result = itertools.combinations(drinks, 2)
print(list(result))
"""
[('아메리카노', '아메리카노'),
('아메리카노', '자몽허니블랙티'),
('아메리카노', '바닐라라떼'),
('자몽허니블랙티', '자몽허니블랙티'),
('자몽허니블랙티', '바닐라라떼'),
('바닐라라떼', '바닐라라떼')]
"""
result = itertools.combinations_with_replacement(drinks, 2)
print(list(result))
상단 코드는 itertools 라는 반복 가능한 객체를 중심으로 다루는 라이브러리를 활용한 소스코드이다.
- itertools.permutations([List], a) : 순열로서 리스트에서 a개를 선택해서 순열을 반복 가능한 객체로 반환하는 함수
- itertools.combinations([List], a) : 리스트에서 a개를 선택해서 조합을 반복 가능한 객체로 반환하는 함수
- itertools.combinations_with_replacement([List], a) : 같은 숫자를 중복해서 조합 가능한 함수
import functools
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(functools.reduce(lambda x, y: x * y, data)) # 3628800
print(functools.reduce(lambda x, y: x + y, data)) # 55
상단 코드는 functools라는 라이브러리를 활용했으며 그 안에 있는 functools.reduce([function], [List])는 함수를 반복 가능한 객체에 적용시켜 좌에서 우측으로 적용시켜 하나의 값으로 합치는 역할을 담당하고 있다.
import operator
listing = [('Eunji', '1993'), ('Chorong', '1991'), ('Bomi', '1993'), ('Namjoo', '1995'), ('Hayoung', '1996')]
# [('Chorong', '1991'), ('Eunji', '1993'), ('Bomi', '1993'), ('Namjoo', '1995'), ('Hayoung', '1996')]
print(sorted(listing, key=operator.itemgetter(1)))
listing02 = [{"name": 'Eunji', "Year": '1993', "result": '100'},
{"name": 'Chorong', "Year": '1991', "result": '75'},
{"name": 'Bomi', "Year": '1993', "result": '90'},
{"name": 'Namjoo', "Year": '1995', "result": '80'},
{"name": 'Hayoung', "Year": '1996', "result": '95'}]
'''
[{'name': 'Bomi', 'Year': '1993', 'result': '90'},
{'name': 'Chorong', 'Year': '1991', 'result': '75'},
{'name': 'Eunji', 'Year': '1993', 'result': '100'},
{'name': 'Hayoung', 'Year': '1996', 'result': '95'},
{'name': 'Namjoo', 'Year': '1995', 'result': '80'}]
'''
print(sorted(listing02, key=operator.itemgetter('name')))
'''
[{'name': 'Chorong', 'Year': '1991', 'result': '75'},
{'name': 'Eunji', 'Year': '1993', 'result': '100'},
{'name': 'Bomi', 'Year': '1993', 'result': '90'},
{'name': 'Namjoo', 'Year': '1995', 'result': '80'},
{'name': 'Hayoung', 'Year': '1996', 'result': '95'}]
'''
print(sorted(listing02, key=operator.itemgetter('Year')))
'''
[{'name': 'Eunji', 'Year': '1993', 'result': '100'},
{'name': 'Chorong', 'Year': '1991', 'result': '75'},
{'name': 'Namjoo', 'Year': '1995', 'result': '80'},
{'name': 'Bomi', 'Year': '1993', 'result': '90'},
{'name': 'Hayoung', 'Year': '1996', 'result': '95'}]
'''
print(sorted(listing02, key=operator.itemgetter('result')))
- operator.itemgetter() : sorted()와 같은 함수의 key 매개변수에 적용해서 다양한 기준으로 정렬하도록 도와주는 모듈
상단 코드처럼 정렬하고자 하는 대상이 튜플이면 몇 번째를 기준으로 정렬하겠다고 의사를 밝혀야 하기 때문에 .itemgetter()에 숫자를 넣는다. 이 때 숫자는 0부터 첫번째를 시작한다. 만약 정렬 대상이 Key와 Value가 명확한 딕셔너리면 괄호 안에 정렬 기준은 Key가 된다. 그러면 괄호 안에 명시해둔 Key값을 기준으로 정렬된다.
import operator
class Member:
def __init__(self, name, year):
self.name = name
self.year = year
listing = [
Member('Eunji', '1993'),
Member('Chorong', '1991'),
Member('Bomi', '1993'),
Member('Namjoo', '1995'),
Member('Hayoung', '1996')
]
# [('Chorong', '1991'), ('Eunji', '1993'), ('Bomi', '1993'), ('Namjoo', '1995'), ('Hayoung', '1996')]
print(sorted(listing, key=operator.attrgetter('year')))
다음과 같이 정렬할 대상이 튜플이면서 클래스가 있는 경우에는 attrgetter()안에는 클래스 안에 있는 매개변수를 통해 정렬 기준을 지정해야 한다.
import shutil
shutil.copy('C:\Practice_\Sample.txt', 'C:\Practice_\Sample.txt.pdf')
shutil 라이브러리는 파일을 이동하거나 복사할 때 사용하며 대표적으로 2개의 함수가 있다.
- .copy('[대상파일]', '[복사될 파일의 위치와 이름]') : 대상 파일을 원하는 위치에 원하는 이름과 확장자로 복사
import shutil
shutil.move('C:\Practice_\Sample.txt.pdf', 'C:\Practice_Legacy_\Sample.txt.pdf')
- .move('[이동할 파일 위치와 파일명]', '[이동될 파일 위치와 파일명]') : 대상 파일을 원하는 위치에 이동
import glob
print(glob.glob('C:/*'))
'''
[
'C:/apache-tomcat-8.5.93',
'C:/Practice_', 'C:/Practice_Legacy_',
'C:/Program Files', 'C:/Program Files (x86)',
'C:/ProgramData', 'C:/Recovery',
'C:/Temp', 'C:/Users'
...
]
'''
- glob.glob('[경로]') : 디렉토리에 있는 폴더와 파일을 리스트 형식으로 출력하는 역할
import webbrowser
webbrowser.open_new('https://untitedblue.tistory.com/')
- webbrowser.open_new('[URL]') : 웹브라우저를 통해 웹사이트에 접속해주는 역할
import zipfile
with zipfile.ZipFile('C:/Practice_/Sample_ziping_20240302.zip', 'w') as ziping :
ziping.write('C:/Practice_/Sample.txt')
ziping.write('C:/Practice_/Sample_002.txt')
ziping.write('C:/Practice_/Sample_003.txt')
with zipfile.ZipFile('C:/Practice_/Sample_ziping_20240302.zip') as ziping :
ziping.extractall()
상단의 코드는 zipfile이라는 라이브러리인데 이는 주로 여러 파일을 압축하거나 해제할 때 사용한다.
- with zipfile.ZipFile([FilePath], [옵션]) as [Alias] : 압축파일을 저장할 위치와 옵션을 지정
- [Alias].write([FilePath + FileName]) 압축할 파일 지정
- [Alias].extractall() : 전체 압축 해제
- [Alias].extract([FileName]) : 특정파일 압축 해제
import json
with open('C:/Practice_/student.json') as j :
result = json.load(j)
print(type(result)) # <class 'dict'>
print(result) # {'name': '홍길동', 'age': 25, 'major': '컴퓨터공학과'}
plusData = {"name": "이순신", "age": 23, "major": "기계공학과"}
result = json.dumps(plusData, ensure_ascii=False)
print(result) # {"name": "이순신", "age": 23, "major": "기계공학과"}
상단 코드는 json이라는 라이브러리이며 json 파일을 읽고 쓰는데 사용한다.
- with open([FilePath + FileName]) as [Alias] : 명칭을 지정하면서 특정 파일을 사용하기 위해 오픈
- json.load([Alias]) : 오픈한 파일에 대한 데이터가 있는 명칭을 읽어오는 역할
- json.dumps([dict], ensure_ascii=False) : 딕셔너리 형태의 객체를 json으로 변환하는 역할이며 ensure_ascii=False를 통해 유니코드로 출력되는 것을 일반적인 문자로 출력되도록 한다.
'Programming Language > Python' 카테고리의 다른 글
[Python] 외부 라이브러리 (0) | 2024.03.04 |
---|---|
[Python] 파이썬에서의 객체지향 - 클래스, 모듈, 내장함수, 패키지, 예외 처리 (1) | 2024.02.09 |
[Python] 프로그래밍의 입출력, 함수 (0) | 2023.12.25 |
[Python] 상황에 따라 제어하다. 제어문 (1) | 2023.12.23 |
[Python] 파이썬의 시작, 자료형과 print() (1) | 2023.12.17 |