파이썬 표준 라이브러리
파이썬 표준 라이브러리에 대해 정리합니다.
File
-
shutil
파일을 복사하거나 이동할 때 사용하는 모듈
import shutil ## copy : 파일 복사 shutil.copy("./file/test1.txt", "./file/test2.txt") ## move : 이동 shutil.move("./file/test1.txt", "./file/test3.txt")
-
glob
디렉토리에 있는 파일 이름을 모두 조회할 때 사용하는 모듈
import glob file_path_list: list[str] = glob.glob("./file/*") # ['./file/test2.txt', './file/test3.txt']
-
pickle
직렬화
import pickle data = { "key": "value" } with open("./file/test1.txt", "wb") as file_pickle: pickle.dump(data, file_pickle) with open("./file/test1.txt", "rb") as file_pickle_read: data = pickle.load(file_pickle_read) # {'key': 'value'}
-
os
운영체제 시스템 모듈
import os ## environ : 시스템 환경 변수 반환 os.environ # dictionary os.environ["PATH"] ## path.expanduser('~) 홈디렉토리 home_path = os.path.expanduser('~') ## chdir : 디렉토리 위치 변경하기 os.chdir(f"{home_path}/Private/dev/learning/python/") ## getcwd : 현재 디렉토리 위치 반환 print(os.getcwd()) ## system : 시스템 명령어 호출하기 ## 시스템 자체의 프로그램이나 기타 명령어를 파이썬에서 호출할 수 있다. ## `os.system("명령어")` os.system("ls") os.system("ls -al") ## popen : 시스템 명령어를 실행한 결과값을 읽기 모드 형태의 파일 객체로 반환 file_ls = os.popen("ls") ## mkdir : 디렉토리 생성 os.mkdir("디렉토리경로") ## rmdir : 디렉토리 삭제 os.rmdir("디렉토리경로") ## remove : 파일 삭제 os.remove("파일경로") ## rename : 파일명 변경 os.rename("소스 파일", "타겟 파일")
-
zipfile
여러개의 파일을 zip 형식으로 합치거나 해제할 때 사용하는 모듈
import zipfile ## 묶기 with zipfile.ZipFile("./file/filename.zip", 'w') as zip: zip.write('./file/test1.txt') zip.write('./file/test2.txt') zip.write('./file/test3.txt') ## 해제 with zipfile.ZipFile("./file/filename.zip") as zip: zip.extractall("./file/compact/") ## 특정 파일만 해제 # with zipfile.ZipFile("./file/filename.zip") as zip: # zip.extract("test1.txt") ## 압축 묶기 with zipfile.ZipFile("./file/filename.zip", 'w', compression=zipfile.ZIP_LZMA, compresslevel=9) as zip: pass ### ZIP_STORED : 압축하지 않고 파일을 zip으로만 묶는다. 속도가 빠르다. ### ZIP_DEFLATED : 일반적인 zip 압축ㅇ로 속도가 빠르고 압축률은 낮다(호환성이 좋음). ### ZIP_BZIP2 : bzip2 압축으로 압축률이 높고 속도가 느리다. ### ZIP_LZMA : lzma 압축으로 압축률이 높고 속도가 느리다(7zip과 동일한 알고리즘으로 알려져있다). ### compressionlevel 은 압축 수준을 의미하는 숫자값으로, 1~9를 사용한다. 1은 속도가 가장 빠르지만 압축률이 낮고, 9는 속도가 가장 느리지만 압축률이 높다.
-
tempfile
파일을 임시로 만들어서 사용할 수 있는 모듈
import tempfile ## mkstemp : 중복되지 않는 임시 파일의 이름을 무작위로 만들어서 반환 filename = tempfile.mkstemp() # TemporaryFile : 임시 저장 공간으로 사용할 파일 객체를 반환 ## 이 파일은 기본적으로 바이너리 쓰기 모드를 갖는다. ## close 가 호출되면 이 파일은 자동으로 삭제된다. with tempfile.TemporaryFile('r+b') as file_temp: pickle.dump({"a": 1}, file_temp) # 바이너리를 저장하면서 커서가 파일의 맨 뒤로 이동 file_temp.seek(0) # EOFError: Ran out of input, 끝에 있기 때문에 커서를 파일의 맨 앞으로 이동 pickle.load(file_temp)
Iterable
-
itertools
반복 가능한 데이터 함수 모듈
import itertools ## zip_longest : 같은 갯수의 자료형을 묶는 파이썬 내장 함수인 zip 함수와 동일하게 동작한다. ## 하지만 반복 가능한 객체의 길이가 다를 경우 긴 객체의 길이에 맞춰 fillvalue에 설정한 값을 짧은 객체에 채울 수 있다. students = ['권영찬', '이진혁', '박찬혁', '한예진'] drink = ['사이다', '콜라'] zip_result = zip(students, drink) # [ ('권영찬', '사이다'), ('이진혁', '콜라') ] zip_longest_result = itertools.zip_longest(students, drink, fillvalue='fill') # [ ('권영찬', '사이다'), ('이진혁', '콜라'), ('박찬혁', 'fill'), ('한예진', 'fill') ] ## permutation : 반복 가능한 객체 중에서 r개를 선택한 순열을 iterator로 반환하는 함수 permutation = itertools.permutations([1, 2, 3], 2) # [ (1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2) ] ## combinations : 반복 가능한 객체 중에서 순서에 상관없이 r개의 조합을 반환하는 함수 combination = itertools.combinations([1, 2, 3], 2) # [ (1, 2), (1, 3), (2, 3) ] ## combinations_with_replacement : combinations에서 데이터의 중복을 허용하는 조합을 반환하는 함수 combinations_with_replacement = itertools.combinations_with_replacement([1, 2, 3], 2) # [ (1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3) ]
-
functools
고차 함수를 위한 모듈
import functools ## reduce : iterable 요소 값들을 누적 계산하여 최종 계산된 1개의 값을 반환 reduce = functools.reduce(lambda a, b: a + b, [1, 2, 3]) # 6
-
operator
수행 가능한 연산을 효율적으로 처리할 수 있는 함수 모듈
from operator import itemgetter, attrgetter ## itemgetter : 정렬 함수 key 매개변수에 적용하여 정렬할 수 있도록 도와주는 모듈(클래스) students_tuple = [ ("a", 1), ("b", 3), ("c", 2), ] sorted_student_tuple = sorted(students_tuple, key=itemgetter(1)) # [('a', 1), ('c', 2), ('b', 3)] students_dic = [ { "name": "a", "age": 1 }, { "name": "b", "age": 3 }, { "name": "c", "age": 2 } ] sorted_students_dic = sorted(students_dic, key=itemgetter("age")) # [{'name': 'a', 'age': 1}, {'name': 'c', 'age': 2}, {'name': 'b', 'age': 3}] ## attrgetter : 정렬 함수 key 매개변수에 적용하여 정렬할 수 있도록 도와주는 모듈(클래스) class Student: def __init__(self, name, age) -> None: self.name = name self.age = age students_class = [ Student('a', 1), Student('b', 3), Student('c', 2) ] sorted_students_class = sorted(students_class, key=attrgetter('age')) # a, b, c 순 정렬
Time
-
time
시간과 지역화를 다루기 위한 모듈
import time ## time : UTC를 사용하여 현재 시간을 실수 형태로 반환 print(time.time()) # 1693876905.844053 ## localtime : time이 반환한 실수값을 사용해서 연,월,일,시,분,초의 형태로 변환 ## 인수 없이 호출 시 현재 시각을 기준으로 반환 struct_time = time.localtime(time.time()) # struct_time # (tm_year=2023, tm_mon=9, tm_mday=5, tm_hour=10, tm_min=30, tm_sec=51, tm_wday=1, tm_yday=248, tm_isdst=0) ## asctime : localtime가 반환된 튜플 형태의 값을 인수로 받아서 날짜와 시간을 알아보기 쉬운 형태로 반환 ## 인수 없이 호출 시 현재 시각을 기준으로 반환 asc_time: str = time.asctime(struct_time) # Tue Sep 5 10:34:08 2023 ## ctime : time.asctime(time.localtime(time.time())) 을 간단하게 현재시간만을 반환 ctime: str = time.ctime() # Tue Sep 5 10:35:58 2023 ## strftime : 시간게 관계된 것을 세밀하게 표현하는 여러 가지 포맷 코드를 제공하는 함수 ## 인수 없이 호출 시 현재 시각을 기준으로 반환 ## format code : https://wikidocs.net/33#timestrftime strf_day: str = time.strftime('%d', time.localtime(time.time())) ## sleep : 일정한 시간 간격을 지연시키는 함수 ## 초단위로 실수 형태로 입력값을 받는다 for i in range(10): print(i) time.sleep(1)
Date
-
datetime
날짜와 시간을 다루기 위한 모듈
import datetime ## date : 연, 월, 일로 날짜를 표현할 때 사용하는 함수 day1 = datetime.date(2023, 3, 3) # date 타입 day2 = datetime.date(2023, 3, 4) ## timedelta diff = day2 - day1 # timedelta 객체가 반환 diff.days # 1 ## weekday : 0-월요일 ~ 6-일요일 week_day = datetime.date(2023, 9, 5).weekday() # 화요일 1 ## isweekday : 1-월요일 ~ 7-일요일 iso_week_day = datetime.date(2023, 9, 5).isoweekday() # 화요일 2
Math
-
math
C 표준에서 정의된 수학 함수에 대한 액세스를 제공하는 모듈
import math ## gcd : 최대공약수를 구하는 함수 (python 3.5 버전부터 존재) gcd_val = math.gcd(77, 99, 11) # 11 ## lcm : 최소 공배수를 구하는 함수 (python 3.9 버전부터 존재) lcm_val = math.lcm(3, 9, 18) # 18
-
fractions
유리수를 표현할 때 사용하는 표준 라이브러리
from fractions import Fraction ## Fraction Fraction(1, 5) # 5분의 1 Fraction('1/3') # 3분의 1
Random
-
random
난수를 발생시키는 모듈
import random ## random random_val_1 = random.random() # 0.0 ~ 1.0 사이의 실수 중 난수 값을 반환, 0.023461997948057034 rand_int = random.randint(1, 2) # a 이상 b 이하 값 중 난수 값을 반환 choice = random.choice((1,2,3)) # iterable 타입 값을 입력받아 그 값들 중 임의의 값을 반환 sample = random.sample([1,2,3,4,5], 3) # iterable 타입 값과 길이 값을 입력받아 섞어서 길이에 맞춰 반환
Thread
-
threading
스레드를 다루는 모듈
import threading import time def long_task(): for i in range(5): print(f"working {i}") time.sleep(1) print("Start") threads = [] for i in range(5): thread = threading.Thread(target=long_task) threads.append(thread) for t in threads: t.start() for t in threads: t.join() print("End")
Data
-
json
json 데이터 처리 모듈
import json ## load : json 파일을 읽고 dictionary 로 변환하여 반환 import tempfile with tempfile.TemporaryFile("r+") as file_json: file_json.write('{ "test": 1 }') file_json.seek(0) json_data = json.load(file_json) type(json_data) # <class 'dict'> ## dumps : dictionary 자료형을 json 문자열로 변환 dict = { "a": 1 } json_str = json.dumps(dict) print(json_str) ## dump : dictionary 자료형을 json 파일로 생성 with tempfile.TemporaryFile("r+") as file_json: dict = { "한글": "ㄱㄴㄷㄹ" } json.dump(dict, file_json) # 유니코드로 변환 file_json.seek(0) file_json.read() # {"\ud55c\uae00": "\u3131\u3134\u3137\u3139"} file_json.truncate(0) # 파일 크기를 0byte로 조정, 파일 크기를 지정하지 않으면 현재 위치의 크기로 지정된다. json.dump(dict, file_json, ensure_ascii=False) # 유니코드(아스키) 변환 X file_json.seek(0) file_json.read() # {"한글": "ㄱㄴㄷㄹ"} list_json = json.dumps([1, 2, 3]) # '[1, 2, 3]' tuple_json = json.dumps((1, 2, 3)) # '[1, 2, 3]'
Exception
-
traceback
프로그램 실행 중 발생한 오류 추적 모듈
import traceback def a(): a = 1 / 0 def b(): a() def c(): b() try: c() except: print(traceback.format_exc()) # Traceback (most recent call last): # File "/Users/zave/Private/dev/learning/python/standard_library/exception.py", line 12, in <module> # c() # File "/Users/zave/Private/dev/learning/python/standard_library/exception.py", line 9, in c # b() # File "/Users/zave/Private/dev/learning/python/standard_library/exception.py", line 7, in b # a() # File "/Users/zave/Private/dev/learning/python/standard_library/exception.py", line 5, in a # a = 1 / 0 # ~~^~~ # ZeroDivisionError: division by zero
Web
-
urllib
URL을 가져오기 위한 파이썬 모듈
import urllib.request ## request.urlopen : http 요청 resource = "https://wikidocs.net/33" with urllib.request.urlopen(resource) as html: with open("wikidocs_33.html", "wb") as file: file.write(html.read())
-
webbrowser
시스템 브라우져를 호출할 때 사용하는 모듈
import webbrowser ## open_new : 시스템 브라우져 새 창으로 열기 webbrowser.open_new('https://www.naver.com')
Comments