프로그래밍/Python 109

[python] "v1.v2.v3.v4" 버전 문자열을 숫자들로 변환하기

개요일반적으로 이용하는 "v1.v2.v3.v4" 버전 문자열에서 각각의 숫자들을 추출하는 방법을 알아 보겠습니다.크게 두 가지(split(), 정규식) 방법으로 추출할 수 있습니다.split() 메소드 이용법간단하게 문자열의 split() 메소드를 이용하여, 버전 문자열의 "." 문자로 나누어서 int 형식으로 변환하면 됩니다.version_str = "1.2.3.4"parts = version_str.split('.')v1, v2, v3, v4 = map(int, parts)직관적이지만 "1.2.3.4a"과 같이 알파벳이 입력된 경우 "ValueError: invalid literal for int() with base 10: '4a'"와 같은 오류가 발생합니다.따라서 올바른 버전 문자열이 입력되었는지..

[Python] 현재 시간대에 대한 OFFSET 시간 (UTC) 구하기

개요파이썬에서 현재 시간대에 대한 OFFSET 시간 정보를 확인하는 방법을 정리해 둡니다.datetime 활용UTC 기준 시각으로부터 현재 시간대에 대한 OFFSET 시간은, 우리 나라의 경우 +9시간입니다. 이 값을 구하는 몇 가지 방법을 간단하게 알아 보겠습니다.첫 번재는 datetime 패키지를 이용한 방법입니다.from datetime import datetimelocal_now = datetime.now()utc_now = datetime.utcnow()offset = local_now - utc_nowprint(f"UTC Offset : {offset} / {offset.seconds / 3600:+.1f} hours")단순하게 현재 시간대의 datetime을 구한다음 UTC 시간대의 date..

[python] dict 객체 복사의 세 가지 방법 : 참조 복사, 얕은 복사, 깊은 복사

개요Python에서 딕셔너리(dict ; dictionary) 객체를 복사할 때 알아야 할 세 가지 복사 방법을 상호 비교 정리해 둡니다.일반 복사 (참조 복사)등호 ('=') 기호를 통하여 딕셔너리 객체의 참조를 다른 변수에 참조만 그대로 복사합니다.따라서 두 객체는 완전히 동일합니다.original_dict = {'a': 1, 'b': [1, 2, 3]}copy_dict = original_dict# 값 변경 시 원본도 함께 변경됨copy_dict['a'] = 10print(original_dict) # {'a': 10, 'b': [1, 2, 3]}print("원본 딕셔너리 ID:", id(original_dict))print("참조 복사 딕셔너리 ID:", id(ref_copy))print("딕셔..

[python] struct.error: char format requires a bytes object of length 1

문제점 및 증상struct.pack() 함수를 bytes 데이터 생성 중, "c"로 한 문자를 입력받아 처리하는 과정에서 다음과 같은 오류가 발생하였습니다.pack('>c', 'C')Traceback (most recent call last): File "", line 1, in pack('>c', 'C')struct.error: char format requires a bytes object of length 1문제 분석파이썬 2.x 버전에서는 "pack('>c', 'C')"와 같은 코드가 문제가 없었으나, 3.x 버전으로 올라오면서 동일한 문장에 대하여 "struct.error: char format requires a bytes object of length 1" 오류가 발생합니다.다음과 ..

[python] 명령줄 인자 분석 - argparse.ArgumentParser

파이썬에서 명령줄 파라미터를 처리하는 방법을 알아겠습니다.일반적으로 가장 많이 사용되는 것은 파이썬에 내장된 argparse 모듈입니다. 본 글에서는 argparse 모듈의 ArgumentParser 클래스를 이용하는 방법에 대하여 알아 보도록 하겠습니다.명령줄 인자(Command-Line Arguments)란?프로그램을 실행할 때 프로그램에 전달하는 추가 정보입니다.다음과 같은 형식으로 프로그램 실행 시, 추가적인 정보를 전달합니다.$ my_app hello world 123위에서는 "hello" "world" "123" 등 3개의 정보를 추가로 전달하여 "my_app"을 실행하게 됩니다.파이썬에서는 sys.argv로 위와 같이 전달된 명령줄 인자를 받아서 처리할 수 있습니다.import sysprin..

[python] TypeError: argument 'data': 'memoryview' object cannot be converted to 'PyBytes'

문제점 및 증상다음과 같이 "fastcrc"를 이용한 간단한 CRC 계산 코드를 작성하였습니다.10 바이트를 그냥 던져서 계산하는 것과, 5바이트씩 나누어 계산한 결과가 같은지 확인하는 예시입니다.메모리 뷰를 이용한 것은 대량 메모리에 대한 CRC 계산을 위하여, 전체 메모리를 복사하지 않도록 하기 위해서 였습니다.from fastcrc import crc16data = b'1234567890'crc = crc16.kermit(data)print(f'crc16 (1) = {crc:04X}')mv_data = memoryview(data)temp_crc = 0temp_crc = crc16.kermit(mv_data[0:5]), temp_crc)temp_crc = crc16.kermit(mv_data[5:]..

[python] LM73 TI 온도센서에서 온도값 읽어오기

개요LM73CIM 칩은 Texas Instruments에서 제조한 디지털 온도 센서입니다. I2C 인터페이스를 사용하여 Raspberry Pi나 다른 마이크로컨트롤러와 통신할 수 있습니다. 본 글에서는 라즈베리 파이에서 I2C로 LM73CIM 칩으로부터 온도값을 읽어오는 방법에 대하여 설명합니다.라즈베리 파이 I2C 활성화하기"raspi-config"를 이용하여 I2C를 활성화하거나, "/boot/firmware/config.txt" 파일에서 다음 설정 부분의 주석을 해제해 주어야 합니다.dtparam=i2c_arm=on"/boot/firmware/config.txt" 파일의 설정을 변경한 후, 라즈베리 파이를 재부팅 합니다.재부팅한 이후에 "/dev" 폴더에 i2c 관련 장치가 표시됩니다.$ ls /d..

[opencv] 종횡비 고정하여 이미지 크기 조정하기

개요이미지의 크기를 조정할 때 일반적으로 cv2.resize() 함수를 이용하게 됩니다.이 때, 이미지의 종횡비를 왜곡하지 않고 테두리를 추가는 방법들을 살펴 보겠습니다.일반적인 이미지 복사무작위 이미지를 HD(1280 X 720)으로 크기를 조정할 때 다음과 같이 종횡비를 고정하여 만들 수 있습니다. target_height, target_width = 720, 1280 img_org = cv2.imdecode(np.fromfile(full_image_filename, dtype=np.uint8), cv2.IMREAD_UNCHANGED) img_height, img_width = img_org.shape[:2] height_scale, width_scale = (img_height..

[Python] numpy 이용 시 발생한 'ImportError: libopenblas.so.0: cannot open shared object file' 오류

문제점 및 증상개발 환경SBC : Beaglebone blackOS : debianPython : 3.9.2"numpy" 패키지가 필수라 설치하고 실행하였더니 다음과 같은 오류가 발생하였습니다.Traceback (most recent call last): File "/home/debian/.local/lib/python3.9/site-packages/numpy/core/__init__.py", line 24, in from . import multiarray File "/home/debian/.local/lib/python3.9/site-packages/numpy/core/multiarray.py", line 10, in from . import overrides File "/home..

[python] 경로 문자열에서 파일명, 확장자 분리하기

개요전체 경로 문자열에서 폴더명, 파일명, 확장자명을 각각 분리하는 방법을 알아 보겠습니다.폴더명다음과 같이 os.path.dirname() 함수를 이용하면 전체 경로 문자열에서 폴더명을 손쉽게 얻을 수 있습니다.from os import pathfile_path = '/path/to/filename.ext'dirname = path.dirname(file_path)print(f'{dirname=}')# dirname='/path/to'파일명 (확장자 포함)다음과 같이 os.path.basename() 함수를 이용하면 전체 경로 문자열에서 확장자가 포함된 파일명을 손쉽게 얻을 수 있습니다.from os import pathfile_path = '/path/to/filename.ext'basename = ..

728x90