WeniVooks

검색

견고한 파이썬

자주 사용되는 라이브러리

1. 자주 사용되는 라이브러리

Python은 다양한 라이브러리를 제공합니다. 이러한 라이브러리를 사용하면 프로그램을 더 쉽게 작성할 수 있습니다. 어떤 코드를 작성하기 전 라이브러리를 찾아보는 것이 좋습니다. 라이브러리를 사용하면 코드를 더 간결하게 작성할 수 있고, 더 빠르게 작업을 수행할 수 있습니다. 이번 장에서는 자주 사용되는 라이브러리를 소개하겠습니다.

1.1 os 모듈

운영체제와 상호작용하는 데 사용되는 함수들을 제공합니다. 파일과 디렉토리를 만들고, 읽고, 쓰는 것을 비롯하여 환경 변수에 접근하거나 운영 체제 명령을 실행하는 등의 작업을 수행할 수 있습니다.

import os
 
os.mkdir('licat') # licat이란 폴더 생성, 삭제는 os.rmdir()
os.getcwd() # 현재 경로 반환
os.open('a.txt', os.O_CREAT | os.O_WRONLY) # 파일 생성(os.O_CREAT: 필요한 경우 파일을 생성, os.O_WRONLY: 파일을 쓰기 전용 모드로 연다.)
os.rename('a.txt', 'b.txt') # a.txt파일을 b.txt파일로 변경
os.remove('b.txt')
import os
 
os.mkdir('licat') # licat이란 폴더 생성, 삭제는 os.rmdir()
os.getcwd() # 현재 경로 반환
os.open('a.txt', os.O_CREAT | os.O_WRONLY) # 파일 생성(os.O_CREAT: 필요한 경우 파일을 생성, os.O_WRONLY: 파일을 쓰기 전용 모드로 연다.)
os.rename('a.txt', 'b.txt') # a.txt파일을 b.txt파일로 변경
os.remove('b.txt')
1.2 sys 모듈

Python 인터프리터와 상호작용하는 도구를 제공합니다. 이 모듈을 사용하면 명령행 인수를 처리하거나, 입/출력 스트림을 제어하거나, 인터프리터의 상태를 점검하고 제어할 수 있습니다.

import sys a = [1, 2, 3] b = a c = a sys.getrefcount(a) # 얼마나 참조되고 있는가, 기본값은 1입니다.
1.3 math 모듈

수학적 연산을 수행하는데 필요한 함수들을 제공합니다. 제곱근, 로그, 삼각함수 등의 기능이 포함되어 있습니다.

import math math.pi # 출력: 3.141592653589793
1.4 datetime 모듈

날짜와 시간을 다루는 클래스를 제공합니다. 현재 날짜와 시간을 가져오는 것부터 날짜와 시간의 차이를 계산하는 것까지 다양한 기능을 제공합니다.

import datetime s = datetime.datetime(2023, 9, 19, 14, 10) print(s) print(s.year, s.month, s.day, s.hour, s.minute) s = datetime.datetime(2023, 9, 18, 14, 10) print(s.weekday()) # 월요일0, 화요일1, 수요일2 ... 일요일6 today = datetime.date.today() days = datetime.timedelta(days=100) today + days # 100일 후 시간 graduation_date = datetime.date(2023, 12, 29) today = datetime.date.today() print(graduation_date - today) # 졸업까지 남은 일자

다만 이 모듈을 통해 Python의 모든 자료형이 완벽히 JSON으로 변환되지는 않습니다. 예를 들어, 파이썬의 dict는 key로 숫자를 사용할 수 있지만, JSON은 key로 숫자를 사용할 수 없습니다.

1.5 json 모듈

JSON 형식의 데이터를 읽고 쓰는 데 사용됩니다. Python 데이터 구조를 JSON 문자열로 직렬화하거나, JSON 문자열을 Python 데이터 구조로 역직렬화하는 기능을 제공합니다. 일반적으로 클래스로 구현하여 만든 인스턴스는 직렬화되지 않습니다.

직렬화란 데이터를 저장/전송 형식으로 변환하는 것을 얘기합니다. 보통 문자열로 변환됩니다.

import json d = { 'one': 1, 'two': 2, 'three': 3 } s = json.dumps(d) print(type(s)) # str d = json.loads(s) print(type(d)) # dict
1.6 collections 모듈

기본 데이터 컨테이너 외에도 다양한 데이터 컨테이너 타입을 제공합니다. deque, Counter, OrderedDict, defaultdict 등과 같은 고급 데이터 구조를 제공합니다.

import collections d = collections.deque([1, 2, 3, 4]) d.rotate(1) # 1번 오른쪽으로 쉬프트 합니다. 숫자를 2로 바꾸어 비교해보세요. print(d) c = collections.Counter('hello world') print(c) # 요소의 개수를 세어 딕셔너리로 반환합니다. print(c.most_common()) # 가장 많이 나온 문자를 반환합니다.
1.7 itertools 모듈

반복자를 만드는 데 사용되는 함수들을 제공합니다. 이 모듈은 반복자를 만드는 데 사용되는 여러 유용한 함수들을 제공합니다. count, cycle, repeat, chain, compress, dropwhile, takewhile, groupby, islice, starmap, tee, zip_longest 등의 함수가 있습니다.

import itertools for i in itertools.count(10, 2): print(i) if i > 20: break

무한히 반복하는 반복자를 만들 수도 있습니다.

import itertools number = 10 for i in itertools.cycle('ABCD'): print(i) number += 1 if number > 20: break
import itertools number = 10 for i in itertools.repeat(None): print(i) number += 1 if number > 20: break
1.8 requests 모듈

HTTP 요청을 쉽게 보낼 수 있는 기능을 제공하는 외부 라이브러리입니다. REST API와 통신하거나 웹 페이지를 스크래핑하는 등의 작업을 수행하는 데 유용합니다. 보통 BeautifulSoup 모듈과 함께 사용됩니다. BeautifulSoup는 가지고 온 데이터를 우리가 보다 쉽게 접근할 수 있게 파싱합니다.

파싱은 문자열이나 데이터를 분석하여 구조화된 정보로 변환하는 과정을 말합니다.

import requests
from bs4 import BeautifulSoup
 
paullab_url = 'https://paullab.co.kr/bookservice/'
response = requests.get(paullab_url)
response.encoding = 'utf-8'
html = response.text
 
soup = BeautifulSoup(html, 'html.parser')
 
bookservices = soup.select('.col-lg-6 > h2') # col-lg-6 클래스 안의 h2 태그 탐색
for no, book in enumerate(bookservices, 1):
    print(no, book.text)
import requests
from bs4 import BeautifulSoup
 
paullab_url = 'https://paullab.co.kr/bookservice/'
response = requests.get(paullab_url)
response.encoding = 'utf-8'
html = response.text
 
soup = BeautifulSoup(html, 'html.parser')
 
bookservices = soup.select('.col-lg-6 > h2') # col-lg-6 클래스 안의 h2 태그 탐색
for no, book in enumerate(bookservices, 1):
    print(no, book.text)
{"packages":["numpy","pandas","matplotlib","lxml"]}
11.2 모듈과 패키지 동작과 재사용12장 예외처리