반응형
snowman95
코딩수련장
snowman95
전체 방문자
오늘
어제
  • 분류 전체보기 (229)
    • 앱테크 (3)
    • 옵시디언 (5)
    • 드라마, 영화 (1)
    • 개발자 이야기 (23)
    • 프로젝트 (10)
      • 프로젝트 방법론 (7)
      • 프로젝트 기록 (2)
      • Github (1)
    • 개발 지식 (0)
      • 디자인 패턴 (0)
    • 프론트엔드 개발 (5)
      • 테크트리 (2)
      • React.js (19)
      • ReactNative (2)
      • Next.js (6)
      • GraphQL (6)
      • 패키지 매니저 (2)
      • 라이브러리 (3)
      • 상태관리 라이브러리 (4)
      • Web 지식 (3)
      • HTML CSS (26)
      • Javascript (16)
      • 도구 (Tool) (3)
      • 성능 최적화 (1)
      • 디자인시스템 (0)
    • Python (53)
      • 모음집 (1)
      • 문법 (12)
      • 라이브러리 (15)
      • 알고리즘 (10)
      • 백준 문제풀이 (9)
      • 코딩테스트 (2)
      • 도구 (Tool) (3)
    • C++ (20)
      • 알고리즘 (6)
      • 삼성SW기출 (6)
      • 삼성 A형 (6)
    • 데이터사이언스 (1)
    • 인프라 (9)
      • 하드웨어 지식 (4)
      • Ansible (2)
      • Database (2)
      • 쉘스크립트 (1)
    • 주식 (0)
    • 취업 준비 (4)
      • 취업 이야기 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 면접
  • 삼성SDS
  • 나의 해방일지
  • 오블완
  • GraphQL
  • 전공요약
  • 전공 요약 #네트워크
  • 알고리즘
  • C++
  • 전공 요약 #데이터베이스
  • 백준
  • 티스토리챌린지
  • A형
  • nextjs
  • 기계식키보드 #nuphy
  • 언어
  • Next.js #graphql #tailwind.css
  • 전공 요약 #운영체제
  • 공간복잡도
  • 삼성SW역량테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
snowman95

코딩수련장

파이썬 (python) - 잡기술 메모장
Python/문법

파이썬 (python) - 잡기술 메모장

2021. 3. 22. 21:32
728x90
반응형

 

● 문자 사이에 변수 집어넣기

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
    'Python/문법' 카테고리의 다른 글
    • 파이썬 (python) 문자열 뒤집기 (reverse)
    • 파이썬(python) - 입출력
    • 파이썬(python) - 이터레이션 형 (Iteration)
    • 파이썬 (python) - Error 메모장
    snowman95
    snowman95
    (17~19) Unity/Unreal Engine 게임 프로그래머 (20~21) System Administrator ___________ (22~) React 웹 프론트앤드 개발자 __________ 깃헙 : https://github.com/snowman95

    티스토리툴바