파이썬 라이브러리 1
( 출처 : https://wikidocs.net/book/5445 )
목차
- datetime
- collections
- pprint
- random
- itertools
- functools
- os.path
- glob
- pickle
- argparse
- getpass
- 동시 실행
- json
- sys.argv
- abc
- pip
- requests
- 클로저 (closure)
1. DateTime
import datetime
1-1) datetime.date
day1 = datetime.date(2020, 12, 14)
day2 = datetime.date(1995, 6, 5)
day3 = datetime.date.today()
day1.weekday() # 요일
diff = day1 - day2
diff.days # 날짜 차이 (9324)
1-2) datetime.datetime
day3 = datetime.datetime(2020, 12, 14, 14, 10, 50)
day3.hour
day3.minute
day3.second
2. Collections
2-1) collections.deque
( 데크 )
from collections import deque
앞 & 뒤에서 처리 가능 ( 양방향 )
- stack + queue
q = deque([1, 2, 3, 4, 5])
q.rotate(2)
result = list(q)
result # [4, 5, 1, 2, 3]
d = deque([1,2,3,4,5])
d.append(6) # 오른쪽
d.appendleft(0) # 왼쪽
d.pop() # 오른쪽
d.popleft() # 왼쪽
2-2) collections.Counter
from collections import Counter
import re
data = """
산에는 꽃 피네.
꽃이 피네.
갈 봄 여름없이
꽃이 피네.
산에
산에
피는 꽃은
저만치 혼자서 피어있네.
산에서 우는 새여
꽃이 좋아
산에서
사노라네.
산에는 꽃지네
꽃이 지네.
갈 봄 여름 없이
꽃이 지네.
"""
- 단어 뽑기
words = re.findall(r'\w+', data)
- 단어 수 세기
counter = Counter(words)
- 전체 단어 등장 빈도
print(counter)
####################################
Counter({'꽃이': 5, '피네': 3, '산에는': 2, '갈': 2, '봄': 2, '산에': 2, '산에서': 2, '지네': 2, '꽃': 1, '여름없이': 1, '피는': 1, '꽃은': 1, '저만치': 1, '혼자서': 1, '피어있네': 1, '우는': 1, '새여': 1, '좋아': 1, '사노라네': 1, '꽃지네': 1, '여름': 1, '없이': 1})
- (상위 N개) 단어 등장 빈도
print(counter.most_common(2))
####################################
[('꽃이', 5), ('피네', 3)]
2-3) collections.defaultdict
from collections import defaultdict
- dictionary의 초기값 설정 ( 데이터 type )
데이터
text = "Life is too short, You need python."
d = defaultdict(int)
for c in text:
d[c] += 1
print(dict(d))
#############################################################
{'L': 1, 'i': 2, 'f': 1, 'e': 3, ' ': 6, 's': 2, 't': 3, 'o': 5, 'h': 2, 'r': 1, ',': 1, 'Y': 1, 'u': 1, 'n': 2, 'd': 1, 'p': 1, 'y': 1, '.': 1}
3. pprint
PRETTY print
import pprint
pprint.pprint(result)
4. Random
4-1) random.randint
import random
num = random.randint(1, 45) # 1~45 사이 임의 숫자 1개
4-2) random.shuffle
a = [1,2,3,4,5]
random.shuffle(a)
a
########################################
[4, 5, 1, 3, 2]
4-3) random.choice
a = [1,2,3,4,5]
random.choice(a)
########################
2
5. Itertools
import itertools
5-1) itertools.permutations
( 순열 )
list(itertools.permutations(['1', '2', '3'], 2))
#################################################################################
[('1', '2'), ('1', '3'), ('2', '1'), ('2', '3'), ('3', '1'), ('3', '2')]
5-2) itertools.combinations
( 조합 )
it = itertools.combinations(range(1, 46), 6)
##################################################################################
(1, 2, 3, 4, 5, 6)
(1, 2, 3, 4, 5, 7)
(1, 2, 3, 4, 5, 8)
(1, 2, 3, 4, 5, 9)
(1, 2, 3, 4, 5, 10)
(1, 2, 3, 4, 5, 11)
(1, 2, 3, 4, 5, 12)
(1, 2, 3, 4, 5, 13)
...
6. Functools
import functools
6-1) functools.cmp_to_key
( 함수로 정렬 )
정렬 함수의 key 매개 변수에 “함수”를 전달
- 해당 함수는 “2개의 인수”를 필요로 하고,
- 1번째 인수 : 비교 기준
- 함수 조건 : 작으면 음수, 같으면 0, 크면 양수를 반환하는 함수
example : y좌표 순서로 정렬되고 y좌표가 같은 경우 x좌표 순서로 정렬
def xy_compare(n1, n2):
if n1[1] > n2[1]: # y 좌표가 크면
return 1
elif n1[1] == n2[1]: # y 좌표가 같으면
if n1[0] > n2[0]: # x 좌표가 크면
return 1
elif n1[0] == n2[0]: # x 좌표가 같으면
return 0
else: # x 좌표가 작으면
return -1
else: # y 좌표가 작으면
return -1
src = [(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]
result = sorted(src, key=functools.cmp_to_key(xy_compare))
############################################################
print(result)
[(1, -1), (1, 2), (2, 2), (3, 3), (0, 4)]
6-2) functools.reduce
(reduce에서 선언된) lambda 함수를 data의 각 요소들에 차례대로 누적해서 적용
data = [1, 2, 3, 4, 5]
result = functools.reduce(lambda x, y: x + y, data)
print(result) # ((((1+2)+3)+4)+5) = 15
기타) operator.itemgetter
from operator import itemgetter
Tuple
students = [
("jane", 22, 'A'),
("dave", 32, 'B'),
("sally", 17, 'B'),
]
# 2번째 요소를 기준으로 정렬
result = sorted(students, key=itemgetter(1))
print(result)
##################################################
[('sally', 17, 'B'), ('jane', 22, 'A'), ('dave', 32, 'B')]
Dictionary
students = [
{"name": "jane", "age": 22, "grade": 'A'},
{"name": "dave", "age": 32, "grade": 'B'},
{"name": "sally", "age": 17, "grade": 'B'},
]
result = sorted(students, key=itemgetter('age'))
print(result)
##################################################
[{'name': 'sally', 'age': 17, 'grade': 'B'}, {'name': 'jane', 'age': 22, 'grade': 'A'}, {'name': 'dave', 'age': 32, 'grade': 'B'}]