● 문자 사이에 변수 집어넣기
f-string
- python 3.6 이상 사용가능
- 사용법 : f'문자열 {변수} 문자열'
value = 1
result = f'value: {value}'
>> value: 1
주의점 f포맷팅 내의 dictionary 값 호출은 따옴표가 아닌 쌍따옴표를 써야함.
f'value: dict["value"]' (O)
f'value: dict['value']' (X)
{value:<자릿수} # 자릿수 만큼에서 왼쪽 정렬
{value:^자릿수} # 자릿수 만큼에서 중간 정렬
{value:>자릿수} # 자릿수 만큼에서 오른쪽 정렬
{{{value}}} # 진짜 중괄호 출력하고 싶을때
>> {1}
● 특정 타입인지 확인 / 타입검사 / 타입확인
value = 1
type(value) # 단순 출력만
- output : <clase '타입'>
. 타입 : int, str, list, dict, tuple 등...
isinstance(value, type) # 특정 타입인지 검사
- input :
. type : int, str, list, dict, tuple 등..
- output : True/False
isinstance(np.float16(1), np.floating)
>> True
isinstance(np.float32(1), np.floating)
>> True
isinstance(np.float64(1), np.floating)
>> True
s = pd.Series([1,2,3])
isinstance(s, pd.Series)
>> True
참고 : numpy가 아닌 유형은 False를 반환합니다.
isinstance(1, np.floating)
>> False
isinstance(1.0, np.floating)
>> False
더 많은 유형 (예 : python floats)을 포함하려면 isinstance에서 튜플을 사용할 수 있습니다.
In [16]: isinstance(1.0, (np.floating, float))
Out[16]: True
● 파이썬 타입 변경
# int 타입으로 변환
int(5.55) = 5
int('a') = 1
int(True) = 1
# float 타입으로 변환
float(10) = 10.0
float(True) = 1.0
float('3') = 3.0
# str 타입으로 변환
str(10) = '10'
str(10.0) = '10.0'
str(True) = 'TRUE'
# chr 타입으로 변환 → 유니코로 변환시킴
chr(65) = A
# bool 타입으로 변환
bool(1) = True
bool('a') = True
bool('dkjfaskas') = True
bool(0) = False
bool(0.0) = False
bool('') = False
● Null Check / Null 확인 / NULL확인 / Null 값 확인
Null 아니면 TRUE
Null 이면 FALSE
if var :
if var != None :
if var is not None :
● all 함수 / any 함수
1. all 함수
- iterable(반복 가능한 자료형)의 모든 요소가 True면 True, 아니면 False
- iterable : 리스트, 튜플, 집합, 딕셔너리, 문자열
- 아예 비어있으면 True
2. any 함수
- iterable(반복 가능한 자료형)중 하나라도 True면 True, 아니면 False
- iterable : 리스트, 튜플, 집합, 딕셔너리, 문자열
- 아예 비어있으면 False
# all 함수
all([1,1,1,1,2]) = True
all([0,1,1,1,2]) = False
all([]) = True
all('asdfasdf') = True
all('') = True
all('a','b',1,0) = False
all('a','',1,2) = False
all() = True
# any 함수
any([1,1,1,1,2]) = True
any([0,1,1,1,2]) = True
any([]) = False
any('asdfasdf') = True
any('') = False
any('a','b',1,0) = True
any('a','',1,2) = True
any() = False
● eval 함수
파이썬 코드를 input으로 받아서 실행시킴
eval("100 + 100") = 200
eval('"a" + "b" ') = 'ab'
● 예외처리
0으로 나누는 경우
try:
구문
except ZeroDivisionError as e:
0으로 나눴음요
알파뱃 (소문자) 순서 리스트 만들기
from string import ascii_lowercase
list(ascii_lowercase) : ['a',..'z']
● itertools 모듈
- count(시작, [step]) 시작 숫자부터 step만큼(없으면 1) 씩 무한히 증가하 제네레이터입니다.
- islice(iterable객체, [시작], 정지[,step])
iterable한 객체를 특정 범위로 슬라이싱하고 iterator로 반환됩니다.
● python logging 로그 기록하기
- 라이브러리 : logging
- 구조
Root Logger → basicConfig() 로 설정가능 ㄴ Child Logger1(log1) + handler, fomatter 부착 ㄴ Child Logger2(log2) ㄴ Child Logger2-1(log2.html) → 자식handler는 부모handler 와 연결됨 ㄴ Child Logger2-2(log2.text) ... |
- 주의
자식은 부모와 관련된 handler로 전파한다.
공통된 부분 부모 handler에 부착, 세부적인것 자식 handler에 부착하는 방식으로 만들어야 할 것.
logger.propagate = False # 전파 끊어버리기.
Level | 숫자 값 | 언제 사용하는가? |
NOTSET | 0 | |
DEBUG | 10 | 일반적으로 문제를 진단 할 때만 관심이있는 자세한 정보입니다. |
INFO | 20 | 예상대로 작동하는지 확인합니다. |
WARNING | 30 | 예기치 않은 일이 발생했거나 가까운 장래에 문제가 있음을 나타냅니다 (예 : '디스크 공간 부족'). 소프트웨어는 여전히 예상대로 작동합니다. |
ERROR | 40 | 더 심각한 문제로 인해 소프트웨어가 일부 기능을 수행하지 못했습니다. |
CRITICAL | 50 | 프로그램 자체가 계속 실행되지 않을 수 있음을 나타내는 심각한 오류입니다. |
● 아주 기본적인 수준에서 사용 (root logger 사용 & Handler 없음)
import logging
# 루트 로그 기본 설정
logging.basicConfig(
format = '%(asctime)s:%(levelname)s:%(message)s', 포맷 형식
datefmt = '%m/%d/%Y %I:%M:%S %p', 날짜
level = logging.DEBUG 처리할 가장 낮은 심각도 [INFO, DEBUG, WARNING, ...]
)
이런 형식이 됨
>> 04/04/2021 14:10:04 PM:DEBUG:This is a formatted debug message
# 로그 찍기
logging.debug("디버그")
logging.info("정보")
logging.warning("경고")
logging.error("오류")
logging.critical("심각")
# 이렇게도 가능
level = logging.INFO
logging.log(level, "메세지")
# 변수 로깅 (이전 버전과의 호환성을 위해 % 스타일 사용)
logging.warning('%s before you %s', 'Look', 'leap!')
>> WARNING:root:Look before you leap!
● 자식 logger 생성
import logging
log_format = "[%(asctime)-10s] (줄 번호: %(lineno)d) %(name)s:%(levelname)s - %(message)s"
levelname = logging.INFO
logging.basicConfig(format=log_format) # format 설정
logger = logging.getLogger("name") # 목적에 알맞게 루트 로그 생성
logger.setLevel(levelname) # Level 설정
# 로그 찍기
logger.debug("디버그")
logger.info("정보")
logger.warning("경고")
logger.error("오류")
logger.critical("심각")
● 자식 logger 생성 & Handler, Formatter 사용
logging.basicConfig() 는 Handler 를 붙이는 순간부터 사용되지 않음. Handler로 적용됨.
import logging
log1 = logging.getLogger("log1") # 목적에 알맞게 루트 로그 생성
log2 = logging.getLogger("log2") # 목적에 알맞게 루트 로그 생성
# 더 정교한 사용을 위한 Handler 만들기
# handler 객체 생성
stream_handler = logging.StreamHandler() # Stream(console)에 메시지를 전달
file_handler = logging.FileHandler(filename="information.log") # File에 메시지 전달
# formatter 객체 생성
formatter = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# stream_handler 객체 생성
stream_handler = logging.StreamHandler() # Stream(console)에 메시지를 전달
stream_handler.setLevel(logging.INFO) # handler에 level 설정
stream_handler.setFormatter(formatter) # handler에 format 설정
# file_handler 객체 생성
file_handler = logging.FileHandler(filename="information.log") # File에 메시지 전달
file_handler.setLevel(logging.DEBUG) # handler에 level 설정
file_handler.setFormatter(formatter) # handler에 format 설정
# handler 부착
log1.addHandler(stream_handler)
log2.addHandler(file_handler)
● Handler
StreamHandler 인스턴스는 스트림(파일류 객체)에 메시지를 보냅니다.
FileHandler 인스턴스는 디스크 파일에 메시지를 보냅니다.
BaseRotatingHandler 는 특정 지점에서 로그 파일을 회전시키는 처리기의 베이스 클래스입니다. 직접 인스턴스화하는 것은 아닙니다. 대신 RotatingFileHandler 또는 TimedRotatingFileHandler 를 사용하십시오.
RotatingFileHandler 인스턴스는 디스크 파일에 메시지를 보내는데, 최대 로그 파일 크기와 로그 파일 회전을 지원합니다.
TimedRotatingFileHandler 인스턴스는 디스크 파일에 메시지를 보내는데, 일정한 시간 간격으로 로그 파일을 회전시킵니다.
SocketHandler 인스턴스는 TCP/IP 소켓에 메시지를 보냅니다. 3.4부터, 유닉스 도메인 소켓도 지원됩니다.
DatagramHandler 인스턴스는 UDP 소켓에 메시지를 보냅니다. 3.4부터, 유닉스 도메인 소켓도 지원됩니다.
SMTPHandler 인스턴스는 지정된 전자 우편 주소로 메시지를 보냅니다.
SysLogHandler 인스턴스는 유닉스 syslog 데몬(원격 기계에 있는 것도 가능합니다)에 메시지를 보냅니다.
NTEventLogHandler 인스턴스는 윈도우 NT/2000/XP 이벤트 로그에 메시지를 보냅니다.
MemoryHandler 인스턴스는 메모리에 있는 버퍼에 메시지를 보내는데, 특정 기준이 만족 될 때마다 플러시 됩니다.
HTTPHandler 인스턴스는 GET 또는 POST 을 사용해서 HTTP 서버에 메시지를 보냅니다.
WatchedFileHandler 인스턴스는 그들이 로깅하고 있는 파일을 감시합니다. 파일이 변경되면 닫히고 파일 이름을 사용하여 다시 열립니다. 이 처리기는 유닉스 계열 시스템에서만 유용합니다; 윈도우는 사용된 하부 메커니즘을 지원하지 않습니다.
QueueHandler 인스턴스는 queue 또는 multiprocessing 모듈에 구현된 것과 같은 큐로 메시지를 보냅니다.
NullHandler 인스턴스는 에러 메시지로 아무것도 하지 않습니다. 라이브러리 개발자가 로깅을 사용하지만, 라이브러리 사용자가 로깅을 구성하지 않으면 표시될 수 있는 〈No handlers could be found for logger XXX〉 라는 메시지를 피하려고 할 때 사용합니다. 자세한 정보는 라이브러리 로깅 구성 를 보십시오.
● LogRecord 객체
속성 | 이름 | 설명 |
asctime | %(asctime)s | 인간이 읽을 수 있는 시간 표시 |
created | %(created)f | logRecord가 만들어진 시간 |
filename | %(filename)s | pathname의 file 이름 부분 |
funcName | %(funcName)s | logging call을 포함하는 function의 이름 |
levelname | %(levelname)s | 메시지의 Text logging level: 예) INFO |
lineno | %(lineno)d | logging call이 발생한 코드의 line 숫자 |
module | %(module)s | filename의 모듈 이름 부분 |
message | %(message)s | 메시지 |
name | %(name)s | logger의 이름 |
pathname | %(pathname)s | full pathname |
thread | %(thread)d | thread ID |
threadName | %(threadName)s | thread 이름 |
'Python > 문법' 카테고리의 다른 글
파이썬(python) 정렬 (sort) (0) | 2021.04.20 |
---|---|
파이썬 (python) 문자열 뒤집기 (reverse) (0) | 2021.04.20 |
파이썬(python) - 입출력 (0) | 2021.04.18 |
파이썬(python) - 이터레이션 형 (Iteration) (0) | 2021.04.18 |
파이썬 (python) - Error 메모장 (0) | 2021.04.04 |