파이썬 라이브러리 3

( 출처 : 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)


13. json

example 파일 : myinfo.json

{
    "name": "홍길동",
    "birth": "0525",
    "age": 30
}


파일 읽기

with open('myinfo.json') as f:
    data = json.load(f)


파일 쓰기

data = {'name': '홍길동', 'birth': '0525', 'age': 30}

with open('myinfo.json', 'w') as f:
    json.dump(data, f)


14. sys.argv : 파이썬 스크립트에 파라미터 전달

명령어 실행

c:\projects\pylib>python argv_upper.py life is too short, you need python.

명령어 출력

LIFE IS TOO SHORT, YOU NEED PYTHON.


과정

  • 위와 같이 명령어 실행 시, sys.argv에는 다음과 같은 값이 저장

    ['argv_upper.py', 'life', 'is', 'too', 'short,', 'you', 'need', 'python']
    


argv_upper.py 내용 :

import sys

print(' '.join(map(str.upper, sys.argv[1:])


15. abc : 추상 클래스

추상 클래스를 상속받은 “자식 클래스가 추상 클래스의 특정 메서드를 반드시 구현하도록”한다

( if not, ERROR )


(1) 추상 클래스 구현

from abc import ABCMeta, abstractmethod

class Bird(metaclass=ABCMeta):
    @abstractmethod
    def fly(self):
        pass


(2) (추상 클래스를 상속받는) 자식 클래스 구현

  • 문제 : fly 메소드를 정의하지 않음 -> 에러!
class Eagle(Bird):
    pass

eagle = Eagle()
eagle.fly()
~~~
TypeError: Can't instantiate abstract class Eagle with abstract method fly


16. pip

# 1) 설치
pip install SomePackage # default : 가장 최신 버전
pip install SomePackage==1.0.4

# 2) 지우기
pip uninstall SomePackage 

# 3) 업그레이드
pip install --upgrade SomePackage 

# 4) 설치된 패키지 목록
pip list


requirements.txt

docutils==0.9.1
Jinja2==2.6
Pygments==1.5
Sphinx==1.1.2 


한방에 설치하기!

pip install -r requirements.txt


17. requests

(1) 게시물 조회 (GET)

url = 'https://jsonplaceholder.typicode.com/posts/1'
res = requests.get(url)

pprint.pprint(res.json())


(2) 조건에 맞는 게시물 조회 (GET)

url = 'https://jsonplaceholder.typicode.com/posts'
params = {'userId': 1}
res = requests.get(url, params=params)


(3) 게시물 저장 (POST)

url = 'https://jsonplaceholder.typicode.com/posts'

headers = {'Content-type': 'application/json; charset=utf-8'}
data = {
    'title': 'foo',
    'body': 'bar',
    'userId': 1,
}

res = requests.post(url, headers=headers, data=json.dumps(data))


(4) 게시물 삭제 (DELETE)

url = 'https://jsonplaceholder.typicode.com/posts/1'
res = requests.delete(url)


# 18. 클로저 ( closure )

함수 내에 내부 함수(inner function)를 구현하고, 그 내부 함수를 리턴하는 함수

def mul(m):
    def wrapper(n):
        return m * n
    return wrapper
    
mul3 = mul(3)
mul5 = mul(5)

print(mul3(10)) # 30
print(mul5(10)) # 50