프로그래밍/Python 12

[Python] SlackBot 쉽게 만들기

오늘 소개할 것은 Slack Bolt다. Slack Bolt 이전에는 슬랙봇을 만들기 위해 Redirect URL을 App에 정의 해주어야 했고, 그렇기 때문에 도메인도 필요하고 LocalHost에서 돌릴려면 ngrok 같은 서비스도 부가적으로 이용해야 했다. 웹 애플리케이션을 만들어야 했던건 덤이다 ㅎ... 하지만 이 모든것은 Bolt선에서 모두 정리된다! 두-둥 시작하기 슬랙 앱 만들기 봇 토큰 Scope 요청해서 토큰 발급받기 위 2가지 과정이 선행되어야 함은 기존과 변함없다. 하지만 Socket Mode를 켜줘야하는 추가 설정이 필요하다. Socket Mode는 우리의 봇이 HTTP 엔드포인트를 노출하지 않고도 작동할 수 있게 해준다. 설령 봇이 방화벽 뒤에있더라도 말이다. Socket Mode를..

[Python] zstandard로 dictionary list 압축하기

# ZstdHelper HTML 삽입 미리보기할 수 없는 소스 아래 내용을 토대로만든 Zstd 헬퍼 클래스입니다. # 압축 ZstdHelper().compress(dictlist) # 압축해제 dictlist = ZstdHelper().decompress(filename) # pickle? 파이썬에서 dictionary list를 파일로 저장하고, 다시 읽으려고 할때 일반적으로는 간편한 pickle을 이용한다. 10만개의 딕셔너리를 담고있는 파이썬 리스트를 파일로 저장하고, 읽는 예시 코드를 보자. if __name__ == '__main__': result = list() for i in range(1, 100000): result.append({"indexofitem": i}) pickle_test(..

CLI로 Python 실행시 No module named 오류 해결방법

# ModuleNotFoundError PyCharm같은 통합개발환경(IDE)에서 편하게 개발할때는 이슈가 없었는데, VS code로 docker에 띄울 배치 스크립트를 개발하던 중 문제가 생겼다. 가상환경(Virtual Environment)을 구성하여 활성화시키고, 실행시켰는데 모듈을 찾을 수 없다는 것이다. python .\my_game\batch1.py Traceback (most recent call last): File "C:\Users\ASUS\PycharmProjects\RankingServer\batch\my_game\batch1.py", line 6, in from libs.task.TaskManager import TaskManager ModuleNotFoundError: No mod..

[Windows] mysqlclient 설치하기 (pip install mysqlclient)

MySQLdb/_mysql.c(29): fatal error C1083: 포함 파일을 열 수 없습니다. 'mysql.h': No such file or directory error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30 133\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2 pip install mysqlclient를 하려고하면 위 오류로 인해 설치가 막힌다. # 빠른 해결법 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 사이트에 접속하여 mysqlclient 중 ..

Python 특정 키 값을 기준으로 Dictionary List에서 더하기

문제 arr = [] arr.append({"name": "A", "acquired_xp": 200, "key": 1, "data": 1}) arr.append({"name": "B", "acquired_xp": 500, "key": 2}) arr.append({"name": "B", "acquired_xp": 500, "key": 3}) arr.append({"name": "C", "acquired_xp": 750, "key": 4}) arr.append({"name": "A", "acquired_xp": 300, "key": 5})이렇게 Dictionary로 이루어진 리스트가 있고, acquired_xp항목을 이름에 따라 더하려고 한다. key는 고유값이므로 더하면 안되며, 첫번째로 만나는 key값을..

Python 정규식 그룹명으로 match 결과 가져오기 (group name)

filename = "backup_20220409180756_20220423180756" regex = re.compile(r"^backup_(?P\d+)_(?P\d+)$") match = regex.search(filename) if match: print(match.group("end")) # "20220423180756" 정규식 그룹명을 이용하면 편리하게 원하는 부분을 추출해낼 수 있다. (?P) 같은 식으로 사용할 수 있는데 위 예제는 정규식을 활용하여 파일명에서 시작시간과 끝시간을 뽑아내는 예제이다. 정규식 작성에 앞서 정규식을 테스트 해보기위해 regexr.com를 많이 이용하는데, 그룹명 테스트 만큼은 regex101이라는 사이트가 훨씬더 친절하게 결과가 나온다.

Falcon req.get_param()으로 모든 파라미터를 받아보자

일반적으로 Falcon에서는 Query parameter에 있는 값을 req.get_param('name')으로 읽어올 수 있다. 하지만 폼데이터 역시 동일한 방법으로 얻어오면 구분은 안가긴 하지만 편할 것이다. 간단한 세팅으로 이를 실현시킬 수 있다. application/x-www-form-urlencoded application/x-www-form-urlencoded로 들어오는 값들도 req.get_param()을 통해 얻고 싶다면 아래 라인을 추가하면 된다. app.req_options.auto_parse_form_urlencoded = True multipart/form-data 추가로 falcon-multipart라는 모듈 설치가 필요하다. pip install falcon-multipart ..

Python 프로젝트 패키지 관리하기: pip freeze requirements.txt

파이썬 프로젝트에 설치한 수많은 라이브러리의 의존성을 관리하기 위하기 위한 방법이다. 이것이 왜 중요하냐면, 당연하게도 프로그램이 언제나 내 컴퓨터에서만 돌아가는 것은 아니기 때문이다. 다양한 환경에서 배포되고 실행될 수 있어야하며, 그때마다 프로젝트에서 사용한 모듈을 설치해주어야하는데... 아래 명령어를 이용하면 현재 가상환경에 설치되어있는 패키지 목록을 requirements.txt 파일에 작성해준다. pip freeze > requirements.txt 다른 환경에서 requirements.txt에 적힌 모듈들을 모두 설치하는 방법은 아래와 같다. pip install -r requirements.txt install 명령어의 -r 옵션은 --requirement로, 주어진 requirement 파..

[Python] 코사인 유사도를 이용한 영화 추천 알고리즘 만들기

오늘은 영화 시놉시스를 바탕으로 영화 추천 알고리즘을 만들어 보려고 한다. 내가 "베테랑"이라는 영화를 좋아했다고 할때, 이와 가장 유사한 영화순으로 추천을 해 줄것이다. 필요한 절차는 다음과 같다. (1) 영화 시놉시스에서 주요 단어를 추출하기 (2) 불용어(의미없는 단어) 제거하기 (3) TF-IDF를 구하여 문서(영화)별로 어떤 단어가 중요하게 사용되었는지 구하기 (4) 각 문서마다 "베테랑"과의 코사인 유사도를 계산하여 유사도가 높은 순으로 결과 정렬하기 첨부파일 전체 코드 + data.json 다운받기 영화 시놉시스에서 주요 단어를 추출하기 시놉시스는 네이버에서 대충 긁어왔다. 첨부파일 data.json 을 참고하면된다. 데이터의 제일 마지막에 비교하고자하는 영화 "베테랑"을 넣고 Konlpy의..