문자를 그대로 실행하고 싶을 때 pandas.DataFrame으로 데이터를 읽어왔더니 값에 리스트가 통째로 들어있거나, 딕셔너리가 들어있는 경우가 있던 적이 있다. 해당 값은 진짜 리스트, 진짜 딕셔너리가 아닌 그런 척 하는 문자열일 뿐이었다. 이런 경우에는 어떻게 값을 처리해주어야 할지 난감할 수 있다. 이 때 사용할 수 있는 ast 모듈과 eval 함수를 소개하고 그 차이를 비교해보자. ast.literal_eval 공식 문서 https://docs.python.org/3/library/ast.html#ast.literal_eval ast 모듈은 문법을 구조화 시켜주는 모듈이다. 그 중 literal_eval 함수는 이름처럼 문자(literal) 그대로 평가(evaluate)하는 것이다. 즉, str..
csv CSV란 Comma Separated Values의 약자로, 쉼표로 구분된 값이라는 뜻이다. 이 형식은 스프레드시트와 데이터베이스에 대한 가장 일반적인 가져오기 및 내보내기 형식으로, 데이터를 좀 다루어 보았다면 모를 수가 없는 파일 형식이다. csv 모듈은 CSV 형식의 데이터를 읽고 쓰는 클래스를 구현한다. 다른 응용 프로그램에서 이해할 수 있는 CSV 형식을 기술하거나 자신만의 특수한 용도의 CSV 형식을 정의할 수도 있다. csv 모듈을 활용해 가장 간단한 읽기와 쓰기를 사용해보자. 공식 문서 https://docs.python.org/3/library/csv.html 읽기 csv.reader import csv f = open("data.csv", "r") reader = csv.read..
APScheduler python script를 원하는 시간에, 혹은 원하는 주기마다 실행해야 한다면 스케줄링에 대해 고민해야한다. 나의 경우는 DB에 데이터를 업데이트 하기 위한 python 파일을 일정 시간(1시간, 10분 등)마다 실행하고자 했다. 이런 경우 python 스케줄링 라이브러리로 APScheduler를 사용해보자. 데몬이 아니며 이미 존재하는 앱 내에서 간단한 구현으로 쉽게 사용이 가능하고, SQLAlchemy, mongoDB, Redis 등의 백엔드와 함께 사용 가능하다. 공식 문서 https://apscheduler.readthedocs.io/en/3.x/ 트리거 타입 종류 date : 특정 시점에 작업을 한 번만 실행 ex) run_date='2023-07-20 15:30:00' ..
python에서 MySQL, MariaDB 통신 데이터를 만지다보면 python에서 MySQL이나 MariaDB과 통신할 일이 많다. 데이터를 DB에서 바로 수집한다거나, 정제한 데이터를 DB에 적재하기도 한다. 이 때 주로 사용하는 모듈인 pymysql과 sqlalchemy에 대해 알아보자. pymysql 사용하기 SQL 쿼리문을 통해 서버와 데이터베이스가 통신한다. 직접적으로 데이터베이스에 접근하기 때문에 속도가 매우 뛰어나고, 데이터간 JOIN을 구현해야 하는 경우 아주 용이하다. 하지만 DB에 연결하는 connection pool을 직접 관리해야한다. 공식 문서 https://pymysql.readthedocs.io/en/latest/ 설치 pip install pymysql DB 연결 conn ..
logging 사용 이유 이 모듈은 응용 프로그램과 라이브러리를 위한 유연한 이벤트 로깅 시스템을 구현하는 함수와 클래스를 정의합니다. 표준 라이브러리 모듈로 로깅 API를 제공하는 것의 주요 이점은, 모든 파이썬 모듈이 로깅에 참여할 수 있어서, 응용 프로그램 로그에 여러분 자신의 메시지를 제삼자 모듈의 메시지와 통합할 수 있다는 것입니다. 출처 https://docs.python.org/ko/3/library/logging.html print문을 코드 여기저기에 집어넣고 일일이 결과를 확인하는 경험은 누구나 있을 것이다. 개발과정, 디버깅, 실행 시 코드가 제대로 작동하는지 확인하기 위한 일이었을 텐데, 실무에 뛰어드는 개발자라면 logging을 이용해서 스마트하게 로그를 남겨보자. 모듈 작동 요소 ..
https://www.acmicpc.net/problem/16472 16472번: 고냥이 고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고 www.acmicpc.net 💡IDEA 최대 N개의 종류의 알파벳을 가진 연속된 문자열의 길이 최댓값을 찾는 투 포인터 문제 왼쪽 포인터를 기준으로 오른쪽 포인터를 옮기며 해당 문자열 내 몇 종류의 알파벳을 가졌는지 세어주어야 한다. 다른 것보다 시간 초과가 많이 일어나서 경우를 생각해 제외할 수 있는 부분은 모두 제외시켰다. 1. N==1 이거나 입력 문자열의 길이가 1인 경우 → 정답: 1 2. 입력 문자열이 이미 N개의 종류 알..
https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 💡IDEA 트리, DFS를 사용하는 문제이다. 처음엔 큐를 사용하여 삭제한 노드에 연결된 모든 노드들을 -1로 갱신하여 지워주는 방법으로 풀었으나 99%에서 실패가 떴다. 찾아보니 0번 노드만 남은 경우에도 결과값이 1이여야 하는데, 0으로 출력되고 있었다. 이것을 해결하기 위해 여러 방법으로 수정했으나 도무지 알 수가 없어서 DFS를 사용했다. 삭제한 노드에 연결된 모든 노드들의 부모 노드..
https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 💡IDEA 조건에 맞게 구현하는 문제이다. 큐를 사용해서 뱀의 몸을 구현하고, 주어지는 방향에 맞게 위치를 틀어준다. 방향은 좌우로 움직이는 것을 고려하여 dir 배열을 사용하여 인덱스 값으로 방향을 조절했다. 가장 먼저 0행 0열부터 뱀이 오른쪽 방향으로 움직인다. 갈 수 있는 곳이라면 뱀의 몸에 추가해주고, 시간을 카운트한다. 만약 해당 위치에 사과가 있다면 사과가 없어지고 꼬리는 유지한다. 하지만 ..
https://www.acmicpc.net/problem/2302 2302번: 극장 좌석 주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1) www.acmicpc.net 💡IDEA 동적 계획법을 사용하는 문제이다. 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 구해야 하는데, 조건은 해당 번호의 사람이 본인 번호 자리에 앉거나, 앉지 않거나 두 경우가 존재한다. 가짓수는 몇 번의 반복을 통해서 규칙을 찾을 수 있다. N = 1 N = 2 N = 3 N = 4 N = 5 경우 1 12 21 123 213 132 1234 2134 1324 1243 2143 12..
https://www.acmicpc.net/problem/2529 2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시 www.acmicpc.net 💡IDEA DFS, 백트래킹을 사용하는 문제이다. 숫자를 직접 하나씩 부등호에 따라 넣어주는 식의 브루트 포스가 가능하다. 백트래킹으로 0~9 숫자를 포함하고 포함하지 않고를 결정하며 부등호를 만족하는 수를 찾으면 된다. 레벨(깊이)가 0이거나 방문하지 않았고 두 수(들어가는 숫자 중 마지막 수, 현재 인덱스 값)를 부등호로 비교했을 때 정상적인 경우에 백트래킹을 수행한다. 현재 인덱스 값을 포함한 값으로 재..