Python 308

[filter] 문자열에서 알파벳 추출

문자열 데이터에서 알파벳만 추출하려고 한다. Python 내장 함수 중 하나인 filter 함수를 사용해서 처리해보고자 한다. filter 여러 개의 데이터로부터 특정 데이터만 추릴 때 사용하는 함수로, 주로 list나 tuple을 대상으로 사용한다. filter(function, iterable) function은 데이터를 추리는 조건에 해당하는 함수이다. 직접 정의해서 사용해도 되지만 lambda 함수를 활용할 수도 있다. iterable에는 순회할 수 있는 데이터가 들어간다. list, tuple, set, string 등이 해당될 수 있다. 예시) inp = "abcd123456efghi!@#$" print(filter(str.isalpha, inp)) for i in filter(str.isal..

Python 2022.04.12

[sort] 문자열 사전 역순으로 정렬하기

Python에서 리스트를 정렬할 때 사용할 수 있는 list.sort()와 sorted()는 기본적으로 오름차순으로 리스트를 정렬한다. 오름차순/사전 순 정렬 print(sorted([3, 5, 4, 2, 1])) print(sorted(['b', 'a', 'z', 'v', 'm'])) 숫자는 오름차순으로, 문자는 사전 순으로 정렬된 모습을 확인할 수 있다. 따라서 문자나 문자열을 사전 역순으로 정렬할 때는 정렬된 리스트를 뒤집어주면 된다. list.sort()와 sorted() 모두 bool 형의 reverse 매개변수를 전달받는 것을 이용한다. 내림차순/사전 역순 정렬 print(sorted([3, 5, 4, 2, 1], reverse=True)) print(sorted(['b', 'a', 'z', ..

Python 2022.04.10

[heapq] 최소 힙, 최대 힙

2022.04.19 - 최소 힙 / 최대 힙 최소 힙과 최대 힙 개념은 위 글에서 정리했다. heapq 파이썬에서 제공하는 최소 힙 자료구조 모듈 자바의 PriorityQueue 클래스와 유사하다. heapq를 사용하면 원소가 정렬된 상태로 추가되고 삭제된다. 모듈 임포트 내장 묘듈이기 때문에 별도 라이브러리 설치 없이 사용할 수 있다. import heapq 최소 힙 생성 heapq는 파이썬의 일반 리스트를 최소 힙처럼 다룰 수 있도록 한다. 빈 리스트를 생성한 뒤, heapq 모듈을 통해 원소를 추가하거나 삭제한 리스트가 최소 힙에 해당한다. heap = [] 원소 추가 heapq.heappush 함수를 이용하여 힙에 원소를 추가한다. 첫 번째 매개변수는 원소를 추가할 리스트이고, 두 번째 매개변수는..

Python 2022.03.20

[list] 빈 리스트 확인

보통 다른 프로그래밍 언어의 경우 리스트에서 isEmpty() 라는 메서드를 제공하거나, 리스트의 길이를 이용해서 리스트가 비어있는지 확인한다. 파이썬의 경우, 아래와 같이 리스트의 길이를 이용할 수 있다. li = [] if len(li) == 0: print("List li is empty.") else: print("List li is not empty.") 다만 이런 코드는 파이썬답지 않다고 한다. if문 활용 python에서 if으로 리스트를 확인할 때, 리스트가 비어있으면 False를, 비어있지 않으면 True를 반환한다. 따라서 아래와 같은 방식으로 확인하는 것이 조금 더 파이썬다운 코드라고 한다. li = [] if not li: print("List li is empty.") else: ..

Python 2022.03.14

[Python] 한 번에 여러 문자 치환

문자열의 특정 문자 또는 특정 문자열을 치환할 때에는 보통 str.replace 함수를 사용한다. 하지만 여러 문자를 각각 치환하는데 사용하기엔 좋지 않다. 이 경우에는 str.translate 함수를 사용하는 것이 조금 더 적절하다. 사용법 1. 치환 규칙 정의 dictionary 사용 dictionary를 사용하는 경우 ASCII 코드를 사용하여 정의해야 한다. 아래 예시는 각 대문자를 세 자리 뒤의 문자로 치환하는 규칙을 정의한 것이다. rule = {} for i in range(ord('A'), ord('Z') + 1): rule[i] = (i - ord('A') + 3) % 26 + ord('A') print(rule) str.maketrans() 사용 매개변수로 문자열을 받는다. 첫번째 매개..

Python 2022.03.13

[Python] smtplib.SMTPNotSupportedError: STARTTLS extension not supported by server.

현상 Python 코드로 메일을 전송하기 위해 아래와 같은 함수를 선언하여 사용하려고 한다. 메일 전송을 위한 smtp 서버를 선언하고, 로그인 정보를 이용하여 서버에 접근한 뒤 메일 전송까지 완료하는 함수이다. def send(self): recipients_list = self.recipient + self.email_cc server = smtplib.SMTP(self.email_server, self.email_server_port) server.starttls() server.ehlo() server.login(self.sender, self.passwd) server.sendmail(self.sender, recipients_list, self.msg.as_string()) server.qui..

Python 2022.02.27

[logging] Logger/Handler/Formatter

Logging 모듈 Python에서 로그를 출력하기 위한 기본 라이브러리 이 글에서는 Logging 모듈 사용 방법을 간단하게 정리한다. 사용 logging 모듈을 import 한 후, 출력할 로그 메시지를 전달하여 사용할 수 있다. import logging logging.debug("debug message") logging.info("info message") logging.warning("warning message") logging.error("error message") logging.critical("critical message") 아무 처리도 하지 않고 로그 메세지를 출력한 결과는 아래와 같다. 실행 결과 debug, info level에 해당하는 메시지는 출력하지 않았음을 확인할 수 있..

Python 2022.02.26

[Python] Mail CC 추가

2021.06.21 - Python 첨부 파일 메일 전송 Python 첨부 파일 메일 전송 2021.06.20 - Python 텍스트 메일 전송 지난 글에 이어 이 글에서는 첨부파일을 포함한 메일을 전송할 수 있는 코드를 다룬다. 마찬가지로 코드 전체를 복사해서 사용한다면, MAIN 아래의 email_sender부터 passwd.tistory.com Mail 송신 시 참조 수신자를 추가해야 하는 필요성이 생겨서, 위 글 이후로 아주 오랜만에 Mail 관련으로 정리한다. 이전 글의 코드에서 수정한 부분만을 정리해둔다. 방법 1. 참조 수신자 목록을 메세지 헤더에 추가한다. 각 메일 주소는 ,(쉼표)로 구분되어야 한다. 이 글에서는 참조 수신자 목록을 List로 초기화할 것이기 때문에 join 함수를 사용해..

Python 2022.02.18

ImportError: bad magic number in "": b'\x03\xf3\r\n’

python으로 작성한 코드를 실행시키려고 할 때 아래와 같은 메시지가 나오면서 에러가 발생한 적이 있다. Python(CPython)에서 사용하는 바이트 코드(.pyc)에 문제가 있어 발생한 에러이므로, 해당 바이트 코드를 삭제하는 것으로 문제를 해결할 수 있다. 명령어 find . -name "*.pyc" -exec rm -f {} \; # 또는 find . -name \*.pyc -delete 개념적인 내용 위의 에러는 Python 컴파일 과정과 관련이 있는 것 같아 내용을 정리해둔다. CPython Python은 일반적으로 C로 구현되어 있다고 알려져 있는데, 그 구현체를 CPython이라고 한다. 가장 처음으로 만들어진 구현체이며 표준 구현에 해당한다. CPython은 인터프리터이면서 컴파일러로..

Python 2022.02.14

[Python] input VS sys.stdin.readLine

input과 sys.stdin.readLine 간 속도 차이가 나는 이유에 대해 간단히 적어둔다. Python 2.X Python 2에서 사용자 입력을 처리하기 위한 함수는 input과 raw_input이 존재하며, 그 기능은 아래와 같다. input : 입력 받은 값을 evaluate하여 적절한 자료형으로 초기화하여 반환한다. raw_input : 입력 받은 값을 문자열로 반환한다. 따라서 입력 받은 값을 별도 처리하여 저장하는 input 함수가 상대적으로 느리다. 그렇다면 Python 3에서도 동일할까? 그건 아니다. Python 3.X Python 2에서 사용자 입력을 처리하기 위한 함수 중 raw_input은 삭제되었고, input이 raw_input을 대체하게 되었다. 즉, Python 3의 i..

Python 2022.01.23