파이썬 라이브러리 1

( 출처 : https://wikidocs.net/book/5445 )


목차

  1. datetime
  2. collections
  3. pprint
  4. random
  5. itertools
  6. functools
  7. os.path
  8. glob
  9. pickle
  10. argparse
  11. getpass
  12. 동시 실행
  13. json
  14. sys.argv
  15. abc
  16. pip
  17. requests
  18. 클로저 (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'}]