Python 278

[Pandas] 문자열 데이터로 DataFrame 로드하기

개요Pandas를 사용하면 주로 딕셔너리, 배열 등을 사용해 데이터프레임을 만들거나 파일을 읽어서, 데이터 처리를 수행하게 된다. 하지만 단순한 테스트 경우에는 간단히 문자열 데이터를 사용해 데이터프레임을 만들게 되는데, 이번 글에서는 문자열로만 데이터프레임을 만드는 방법을 소개하려고 한다.   방법Pandas에서 파일을 읽어 들여 데이터프레임을 만드는 함수는 대개 매개변수로 파일 경로나 버퍼를 전달받는다. 즉, read__csv나 read_json 같은 함수에 파일 경로가 아니라 문자열 버퍼를 전달하면 된다. 방법은 무척 간단하다. 문자열 값을 io.StringIO를 사용해 StringIO 객체로 만들어 read_csv 함수 등에 전달하면 된다.참고로 StringIO는 인메모리 텍스트 버퍼를 사용하는 ..

Python 2025.03.17

[Python] itertools.groupby - 연속적인 부분 찾기

개요알고리즘 문제를 풀다 보면 문자열이나 리스트에서 연속적인 부분을 찾아야 하는 문제를 찾아볼 수 있다. 직접 순회하면서 확인하는 방법도 있지만, 이번 글에서는 itertools의 groupby를 사용해 찾아보려고 한다.  iterrtools.groupbygroupby는 연속적인 키과 그룹을 반환하는 iterator를 만든다. 키는 각 요소에 대한 키 값을 계산하는 함수로, 지정하지 않으면 항등 함수로 기본 설정된다. 키 값이 변경될 때마다 그룹이 새로 생성되기 때문에 기본적으로 정렬된 상태에서 사용해야 한다.  사용 예시예로 들어 abbbaaaa라는 문자열에서 연속적인 부분을 찾으려고 한다.from itertools import groupbystr_input = 'abbbaaaa'for k, val i..

Python 2025.03.13

[Python] sqlalchemy - Trino 다루기

개요운영 중인 서비스에서 Trino를 백엔드로 사용하고 있는데, 기존에는 Trino CLI나 별도의 프런트엔드를 사용해서 작업을 수행했었다. 최근 프로그래밍적인 방법을 사용해서 작업을 할 필요가 있어, 방법을 적어두려고 한다.사용 언어는 Python이다.  필요 라이브러리 설치Python으로 Trino를 다루기 위해서는 trino 클라이언트 라이브러리를 선택할 수 있다. trino 클라이언트 라이브러리는 아래와 같이 pip 명령어로 설치할 수 있는데…… pip install trino테스트 환경이 컨테이너 기반이라서 그런지 trino 라이브러리로는 연결이 잘 안 됐다. 때문에 이 글에서는 sqlalchemy를 사용해 다뤄보려고 한다.pip install sqlalchemy  사용법연결 URLsqlalch..

Python 2025.03.12

[Python] Redis - with문을 사용한 연결

개요2023.06.03-[Python] redis 사용하기, 2024.08.14-[Python] Redis - 비동기 연결에서 redis-py 공식 문서를 참조해 Python으로 Redis에 연결하고 작업을 수행해 보았다. 그 후, 컨텍스트 매니저라는 개념을 새로 알게 되었는데…… Redis 연결도 컨텍스트 매니저로 관리하는 게 좋아 보였다. 공식 문서에서는 with 문 사용 없이 일반적인 방법만 기재되어 있는데, 이번 글에서 with문을 사용한 연결이 가능한지 확인해보려고 한다.   with문 사용 가능 여부결론만 말하자면 동기 방식, 비동기 방식 모두 with 문 사용이 가능하다.2025.01.15-[Python] context manager - 리소스 관리에서 with 문을 사용하기 위해서는 __e..

Python 2025.02.13

[Python] async with - 비동기 컨텍스트 관리자

개요Python의 컨텍스트 관리자란 with문을 사용해 리소스를 관리하는 구조로, 리소스의 할당이나 삭제를 자동으로 처리할 수 있는 코드 블록을 생성해 예외가 발생하더라고 리소스의 획득과 해제를 보장한다.다만, 비동기 프로그래밍 방식에서는 비동기 방식으로 리소스를 획득하고 해제해야 하므로 with 문만으로는 충분하지 않다. 때문에 비동기 컨텍스트 관리자라는 개념이 발생했다. 이번 글에선 비동기 컨텍스트 관리자를 구현하고  사용하는 방법을 알아본다.  비동기 컨텍스트 관리자비동기 컨텍스트 관리자는 enter와 exit 메서드에서 실행을 일시 중지할 수 있는 컨텍스트 관리자다.async with EXPRESSION as TARGET: SUITE위의 async with문은 다음과 같이 이해할 수 있다.m..

Python 2025.02.05

[Python] contextlib - Context Manager 관리

개요 2025.01.15-[Python] context manager - 리소스 관리에서 Context Manager라는 개념을 알아보고, Python 매직 메서드를 구현하는 방식으로 구현도 해봤다.이번 글에서는 Context Manager를 구현하는 여러 가지 방법 중 contextlib를 활용하는 방법을 알아보려고 한다.  contextlibcontextlib은 Context Manager에 대한 일반적인 작업을 위한 유틸리티를 제공한다. 여러 작업을 할 수 있지만, contextmanger라는 데코레이터를 사용하면 매직 메서드를 구현하는 것보다 좀 더 간편하게 context manager를 구현할 수 있다.contextmanger 데코레이터를 활용한 기본적인 구조는 아래와 같다.from contex..

Python 2025.02.03

[Python] context manager - 리소스 관리

개요Python에서 파일을 다룰 때는 파일을 열고 닫는 작업이 필요하다.file = open('somefile', 'w')try: file.write('Hola')finally: file.close()일반적인 프로그래밍에서 연 파일은 반드시 닫는 작업을 해야 하는데, 명시적으로 close 함수를 호출하는 불편함을 해소하기 위해 with 문을 사용할 수 있다.with open("asd.txt", "r") as file: lines = file.readlines() ...이 때 with문을 context manager라고 한다. 그럼 대체 context manger라는 게 뭘까? 알아보자.  Context managerContext Manger는 Python의 독특한 기능 중 하나로, ..

Python 2025.01.31

[FastAPI] Lifespan - 이벤트 처리

개요2025.01.13-[FastAPI] startup, shutdown 이벤트 처리에서 FastAPI가 제공하는 on_event 데코레이터를 사용해 애플리케이션 시작 및 종료 시 처리해야 하는 작업을 정의하고 적용했다. 그런데 공식 문서에 의하면 on_event 데코레이터는 deprecated 되고, Lifespan이라는 개념으로 대체되었다고 한다.이번 글에서 Lifespan을 사용하는 방법에 대해 정리해 둔다.  LifespanLifespan은 전체 애플리케이션의 수명주기를 다루며, 애플리케이션이 시작되기 전에 실행되어야 하고, 애플리케이션이 종료될 때 실행되어야 하는 작업을 정의할 수 있게 한다. 주로 전체 애플리케이션에 사용해야 하는 자원, 요청 간 공유 자원, 정리해야 하는 자원을 설정하는 데 ..

Python 2025.01.24

[FastAPI] startup, shutdown 이벤트 처리

개요여타 다른 애플리케이션처럼 FastAPI 애플리케이션 또한 처음 실행을 시작할 때 필요한 설정값을 읽는다던가, 실행을 종료할 때 데이터를 정리하는 등의 작업이 필요할 수 있다. FastAPI는 이러한 종류를 작업을 지원하기 위해 @FastAPI.on_event라는 데코레이터를 제공한다. 이번 글에서 사용 방법을 간단히 알아본다.  @FastAPI.on_eventFastAPI.on_event 데코레이터는 애플리케이션이 시작하기 전이나 종료될 때 실행되어야 하는 이벤트 핸들러를 정의한다. startup, shutdown 이벤트에 대한 핸들러만 정의할 수 있으며, 이벤트 핸들러는 두 개 이상 정의할 수 있다. 참고로 startup 이벤트 핸들러의 경우 모든 이벤트 핸들러가 완료될 때까지 애플리케이션은 요청..

Python 2025.01.23

[Python] Async - signal 처리하기

개요2025.01.09-[Python] signal - 프로그램 종료 처리에서 Python 프로그램의 프로그램 종료 등의 처리를 위한 signal 모듈 사용방법에 대해 알아보았다. 그런데 이제는 비동기로 프로그래밍된 Python 프로그램의 종료 시에 처리해야 할 작업이 생겼다. 이번 글에서는 Python async를 사용할 때에 signal 수신 및 처리 방법을 알아보자.   loop.add_signal_handlerPython은 asyncio라는 고수준 라이브러리로 비동기 프로그래밍을 쉽게 할 수 있지만, signal 처리와 같은 세부 제어를 하기 위해서는 이벤트 루프를 직접 다루어야 한다.이벤트 루프는 시그널 처리를 위한 add_signal_handler라는 함수를 제공한다.loop.add_signa..

Python 2025.01.21