파이썬의 객체(Instance)를 영속화 하는 built-in 객체로써, 파이썬 객체를 Binary File로 저장한 이후, 나중에 다시 활용할 수 있게 해주는 모듈이다.
Binary 파일 형태로 객체를 처리하므로, 파일 열기 모드에 'b'를 붙여줘야 한다.
예를 들어 Pickle 객체 저장할 때는 'wb', Pickle 객체 불러올 때는 'rb'를 입력해준다.
# Template
pickle.dump({Instance}, {파일 객체}) # Instance를 (pickle 객체로) 저장
pickle.load({파일 객체}) # 파일에 저장된 Instance를 불러옴
# 예시
import pickle
with open("a.pickle", "wb") as f:
save = [1,2,3,4,5]
pickle.dump(save, f) # 개발자가 만든 Class의 Instance 또한 저장 가능
with open("a.pickle", "rb") as f:
s = pickle.load(f)
OS에서 직접적으로 다뤄야 하는 File, Directory 등에 대해 Python에서 처리할 수 있도록 만든 Module로써, 다양한 메서드가 존재한다.
이 중 os.path.join(str1, str2)는 유용한 것 같아 따로 정리했다.
만약 str1/str2 파일 경로로 접근하고 싶을 때, 원래라면 "str1\str2" 혹은
str1+"\"+str2로 경로를 저장해야 한다.
하지만, Python에서는 이 방법을 추천하지 않는다.
os.path.join(str1, str2)를 수행하면 위 작업을 모두 수행해준다
A 파일을 B 폴더로 복사하고 싶을 때 활용하는 방식이다.
import shutil
import os
source = "ex.txt"
dest = os.path.join("abc", "def.txt")
shutil.copy(source, dest)
# source 파일을 dest 파일에 Copy하여 저장
프로그램이 실행되는 동안 일어나는 정보를 기록으로 남기는 것으로, Console 화면에 출력, 파일에 남기기, DB에 남기기 등을 통해 Logging 정보를 저장할 수 있다.
print()와 달리 저장한 Log를 분석하여 의미 있는 결과를 도출할 수 있지다.(하지만 print()를 활용하지 않는 것은 아니다. 사실 편하게만 코딩하려면 Logging보다는 print()가 더 좋은 면도 있다.)
Log Level 별로 기록을 남길 필요가 있을 때도 유용하다.
Log를 발생시킨 사건이 프로그램에 얼마나 중대한 영향을 끼치는지에 따라 발생시키는 Log의 Level을 지정해 줄 수 있다.
Log Level의 우선순위는 아래와 같다(참고로, 클 수록 Code에 심각한 영향을 끼치는 사건에 대한 로그라는 의미이다)
DEBUG < INFO < WARNING < ERROR < CRITICAL
Default Log Level은 WARNING이며, 아무런 설정도 하지 않는다면WARNING 이상의 Log만 볼 수 있게 된다.
import logging
logger.debug("DEBUG") # DEBUG Log level
logger.info("INFO") # INFO Log level
logger.warning("WARNING") # WARNING log level
logger.error("ERROR") # ERROR log level
logger.critical("CRITICAL") # CRITICAL log level
import logging
# Logging 시간, Logging 이름, Logger Level, Log Message가 Log로 출력되게 함
formatter = logging.Formatter('%(asctime)s - %(name)s -
%(levelname)s - %(message)s')
userlogger = logging.getLogger("user")
userlogger.setLevel(logging.WARNING)
# User는 WARNING부터 보면 되기 때문에 WARNING으로 Level 설정
mylogger = logging.getLogger("my")
mylogger.setLevel(logging.INFO)
# 운영자는 INFO부터 봐야 하기 때문에 INFO로 Level 설정
stream_hander = logging.StreamHandler()
userlogger.addHandler(stream_hander)
# User는 Log Message만 Console에 출력되게 함
file_handler = logging.FileHandler('myLog')
file_handler.setFormatter(formatter)
mylogger.addHandler(file_handler)
# 운영자는 Log 기록을 myLog라는 파일에 저장함
"""
Formatter는 Handler Obejcts이다.
따라서, handler에 setFormatter()를 통해 Formatter를 적용해줘야지만 format에
맞게 저장이 된다
"""
Formatter 부가 설명
코드 수행 결과
userlogger.info("Login")
mylogger.info("LogIn")
"""
결과 : Console창 - 아무것도 뜨지 않음
myLog파일 - 2022-02-16 03:20:14,142 - my - INFO - LogIn
"""
userlogger.warning("Hacking")
mylogger.warning("Hacking")
"""
결과 : Console창 - Hacking
myLog파일 - 2022-02-16 03:20:14,142 - my - INFO - LogIn
2022-02-16 03:24:41,679 - my - WARNING - Hacking
(Logger는 파일을 append 형식으로 열기 때문에, 이전 Log 기록도 저장되어 있음)
"""