반응형 PYTHON75 Python - URL, WebContent Encode / Decode 하기 HTTP 호출을 진행하면, URL을 인코딩하거나 디코딩하는 일을 자주 경험하게 된다. 이때 주의할 점음 문자열을 encode/decode 를 Byte 레벨로하는 것이 아닌 문자열 수준으로 진행해주어야 한다. 즉 전체 문자열이 아닌 일부 UTF-8 로 작성된 문자열만 변환해주면 된다. 이를 효과적으로 해주는 라이브러리가 urllib 의 parse의 quote와 unquote 를 통해 진행할 수 있다. urllib.parse — URL을 구성 요소로 구문 분석 — Python 3.12.2 문서 urllib.parse — Parse URLs into components Source code: Lib/urllib/parse.py This module defines a standard interface to br.. 2024. 2. 29. Python - Header Content-Disposition의 UTF-8에서 Filename 가져오기 웹을 이용해서 파일을 다운로드하였을때, 파일이름에 대한 정보가 필요한 경우가 있다. 이때 유용하게 사용할 수 있는 헤더 정보가 있는데, 바로 Content-Disposition 이다. Content-Disposition 에는 보통 파일 이름 정보를 함께 보내주는 경우가 있다. 하지만 한글인 경우 UTF-8로 디코딩을 해야 정상적으로 확인이 가능하다. 여러가지로 코드를 테스트해본 결과 unquote를 활용하여 디코딩이 가능하다는 것을 알게 되었는데, 아래 코드를 이용해서 파일 이름정보를 가져올 수 있다. from urllib import parse def get_filename(source_header): fname = re.findall("filename\*=([^;]+)", source_header, .. 2024. 2. 29. Python - OpenCV(4.5.4) 4051: error: (-215:Assertion failed) !ssize.empty() in function 'resize' OpenCV(4.5.4) 4051: error: (-215:Assertion failed) !ssize.empty() in function 'resize' 이 오류를 해결할 수 있는 방법은 명확하지 않은 상황이라고 할 수 있다. 다만 현재로써는 resize는 다음과 같은 문제를 살펴볼 필요가 있다. 1. 타입이 맞지 않는지 resize 시점에 타입을 지정하는 경우, 데이터 타입을 변경해서 진행해 볼 수 있다. 적정한 data type을 지정해 줘야 하기 때문에, float32, int8등을 시도해 보자. cv2.resize(img.astype('float32'), dsize=(125,125)) 2. 올바른 경로 인지 가장 많은 부분에서 이 부분을 확인하라고 하는데, 올바른 경로인지를 확인하는게 좋다. 3.. 2024. 2. 27. SQLAlchemy - str() argument 'encoding' must be str, not ModuleNotFoundError argument 'encoding' must be str, not ModuleNotFoundError 이 오류를 확인하는 데 한참 걸렸는데, 결국은 라이브러리를 설치 하지 않아서 나타난 오류이다. SQLAlchemy 는 실제 연결을 위해서는 PyMySQL을 필요로 한다. PyMySQL SQLAlchemy SQLAlchemy는 Database를 도와주는 프레임워크이고 실제 연결은 PyMySQL을 이용해야 하는 것이다. 혹시 필자와 비슷한 오류를 경험하고 있다면, PyMySQL를 설치하도록 하자. 2024. 2. 26. Python - 특정 문자열 검색하여 잘라내기, finditer 오늘은 특정 문자열을 검색해서 잘라내는 방법에 대해서 정리해보고자 한다. 먼저 기본적으로 Python에서 문자열의 인덱스를 이해할 필요가 있다. 인덱스(문자의 위치)는 [:]를 이용해서 앞뒤를 지정할 수 있다. 아래 예제와 같이 str_test[0:1]은 0(처음)부터 1번까지 내용만 리턴하라는 의미가 된다. 그리고 파이썬은 처음과 끝을 생략할 수 있는데, [:1] 은 처음부터 1까지 [1:] 1부터 마지막까지로 유용하게 사용이 가능하다. 그럼 검색은 어떻게 할 수 있을까? 바로 regex를 이용해서 진행해야 한다. regex는 find와 finditer이 있는데 이 둘의 차이점은 finditer은 매칭되는 값의 위치(인덱스)을 함께 리턴해주게 된다는 점이 크다. import re str_test = '.. 2024. 2. 21. Python - 함수 타입 지정, 타입 힌트(Type Hint)에 대해 파이썬 타입 힌트는 코드에 대한 메타 정보를 제공하여 가독성, 안정성, 유지 관리성을 향상시키는 강력한 도구입니다. 이 튜토리얼에서는 타입 힌트의 기본 개념부터 다양한 사용 사례, 그리고 실제 코딩에 적용하는 방법까지 자세히 살펴보겠습니다. 1. Type Hint, 타입 힌트란 무엇인가? 파이썬은 동적 타이핑 언어이기 때문에 변수나 함수의 타입을 명시적으로 선언할 필요가 없습니다. 하지만 타입 힌트를 사용하면 코드에 사용되는 타입을 명시적으로 표시하여 다음과 같은 다양한 장점을 얻을 수 있습니다. 코드 가독성 향상: 코드를 읽는 사람이 변수나 함수의 역할과 의미를 쉽게 이해할 수 있도록 도와줍니다. 코드 안정성 향상: 타입 오류를 미리 감지하여 개발 단계에서 버그를 예방하고 코드의 안정성을 높입니다. 코.. 2024. 2. 20. Python - HTTPX/Requsets Connection reset by peer 문제 해결하기 Connection reset by peer 오류는 서버와의 연결이 끊어졌을 때 발생하는 일반적인 오류이다. httpx에서 이 오류가 발생하는 경우 다음과 같은 몇 가지 해결 방법을 시도해 볼 수 있다. 여기에서는 HTTPX 를 이용하지만, Requests 라이브러리에서도 동일하게 조치가 가능하다. 서버 환경 설정등 확인해야 할 것이 많지만, 기본적으로 확인해야 하는 요소는 다음 3가지이다. timeout keep-alive 연결 재시도 1. 연결 시간 제한 확인 timeout 매개변수를 사용하여 연결 시간 제한을 늘리면, 서버가 처리하지 못하는 상황에 보다 대기시간을 가져서 처리를 할 수 있다. httpx import httpx client = httpx.Client(timeout=10) # 연결 시간.. 2024. 2. 20. Python - SQLAlchemy로 row 업데이트(update) 방법 3가지 SQLAlchemy로 row 업데이트하는 방법 으로 여기에서는 많이 사용되는 3가지 방법에 대해서 정리해 본다.. 1. update() 함수 사용: update 함수는 Metadata를 이용해서 테이블 정보를 가져오는 경우 사용할 수 있다. from sqlalchemy import update # 업데이트할 테이블 선택 table = User # 업데이트 조건 설정 where_clause = table.c.id == 1 # 업데이트할 값 설정 values = {"name": "새로운 이름"} # 업데이트 쿼리 실행 session.execute(update(table).where(where_clause).values(values)) session.commit() 2. Model 객체 수정: 이는 모델 구조.. 2024. 2. 19. Python - SQLAlchemy 검색 결과 (exists/ not exists)있는지/없는지 확인 from sqlalchemy import exists query = session.query(User).filter(User.name == "John Doe") if query: # 검색 결과가 있으면실행 print("검색 결과가 있습니다.") if not query: # 검색 결과가 없으면 실행 print("검색 결과가 없습니다.") 다음은 SQLAlchemy에서 검색 결과가 있는지 혹은 없는지에 따라서 처리해야 하는 상황에 사용하는 방법 몇가지를 여기에 정리해 본다. 1. first() 또는 one() 메서드 사용 first() 또는 one() 메서드는 쿼리 결과의 첫 번째 행을 가져옵니다. 결과가 없으면 예외를 발생시킵니다. 다음과 같이 사용할 수 있습니다. from sqlalchemy.orm im.. 2024. 2. 19. 이전 1 ··· 4 5 6 7 8 9 다음 반응형