프로그래밍 319

[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 = ..

[python] RGBA 형식의 이미지 찾기

개요인터넷에서 수집한 자료 중에 RGBA 형식의 이미지가 확장자만 "*.jpg"로 저장되어 있는 경우가 종종 있습니다.내부적으로 이미지 처리를 한 후에 cv2.imwrite() 함수를 이용하여 JPG로 저장할 경우 다음과 같이 "RGBA" 형식의 이미지는 JPG로 저장할 수 없다는 오류가 발생합니다.... File "/usr/local/lib/python3.8/dist-packages/PIL/Image.py", line 2240, in save save_handler(self, fp, filename) File "/usr/local/lib/python3.8/dist-packages/PIL/JpegImagePlugin.py", line 631, in _save raise OSError(f"c..

[python] 아스키가 아닌 문자가 포함된 이미지 파일 로딩하기 (imread)

문제점 및 증상다음과 같이 OpenCV를 이용하여 이미지를 로딩하는데 파일 이름이 한글이 포함되어 있을 경우 다음과 같은 WARN이 발생하면서 이미지를 로딩하지 못하였습니다.images_path='D:\\Dev\\Python\\python-test\\cv\\images'image_file='D:\\Dev\\Python\\python-test\\cv\\images\\01비교-1.jpg'[ WARN:0@0.014] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('D:\Dev\Python\python-test\cv\images\01?해결 방법다음과 같이 "n..

[javascript] private 변수에 대한 type hint 설정 방법

개요 자바스크립트에서 클래스 내에 private 변수를 지원하기 시작했습니다. 리터럴 변수일 경우에는 기본값을 설정하면서 변수형이 지정되는데, 클래스 내부에서 생성하여 초기화하는 객체인 경우에는 다음과 같이 "null"로 기본값을 설정하고 작성을 하게 됩니다. private 변수를 초기 기본값을 "null"로 설정하면 해당 객체의 내부 멤버 변수 및 메소드에 대한 VS Code 등에서 type hint가 나오지 않아 불편합니다. 간단한 주석으로 type hint가 나오도록 하는 방법을 알아보도록 하겠습니다. 해결 방안 class MyClass { /** no type hint Image object */ #imageNoHint = null; /** @type {Image} has type hint Ima..

[git] fail to push at Total (client_loop: send disconnect: Broken pipe)

문제점 및 증상 이전 "[git] Total 이후 push 실패 (client_loop: send disconnect: Broken pipe)" 글을 통하여 저장소 복제는 문제는 해결이 되었는데, 소스를 수정한 이후에 push 하면 다음과 같이 "Total ..."이 나온 후 한참을 멈춰있다가 "client_loop: send disconnect: Broken pipe" 문제가 발생하며 push가 실패하였습니다. nvidia@nvidia-OrinNX16G:~/my_prj$ git push -vvv Pushing to ssh://git@my.hanwh.net/nodejs/my_prj Enumerating objects: 6, done. Counting objects: 100% (6/6), done. Del..

프로그래밍 2023.11.30

[PyQt5] 사용자 위젯에서 배경 그리기

개요 위젯을 상속받은 사용자 위젯의 배경을 커스터마이징하여 그리는 방법을 알아보도록 하겠습니다. 배경 그리기 Qt에서 배경 등은 QPainter 객체를 통하여 그릴 수 있습니다. 이를 위해서는 paintEvent() 이벤트 처리 함수를 오버라이드 합니다. 다음 예제는 paintEvent() 함수를 override하고 간단하게 배경을 붉은색으로 칠하는 예제입니다. import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QPen class MyWidget(QWidget): def __init__(self): super().__init__() self.initUI() def init..

[Qt] 창을 전체화면으로 표시하기

개요 특정 윈도우 창을 파워포인트 프리젠테이션 화면처럼 모니터 전체를 채워서 표시해야할 경우가 있습니다. 이를 Qt에서는 어떻게 구현하는지 알아보도록 하겠습니다. 전체화면으로 창 띄우기 특정 창을 파워포인트 프리젠테이션 화면처럼 모니터 전체를 채워서 표시 방법은 간단하게 "showFullScreenMode()" 함수를 호출하면 됩니다. 다음은 "showFullScreenMode()"를 이용한 간단한 예제입니다. from PyQt5.QtWidgets import QApplication, QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Fullscreen Window") #..

[python] itertools.pairwise() 함수 사용법

GStreamer로 작업을 하다보면, 파이프라인 구축을 위하여 생성된 항목들을 연결 (link)해주어야 합니다. C에서는 gst_bin_add_many() 함수가 있어서 간단하게 구현이 가능한데, 파이썬에서는 해당 함수 대신 Element.link_many() 함수를 이용해야 합니다. 그래서 link_many() 함수가 어떻게 구현이 되어 있는지 궁금하여 찾아 보니, 다음과 같이 구현되어 있었습니다. from itertools import tee def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable) next(b, none) return zip(a, b) Gst.Element에 다음과 같이 link_many()..

[NodeJS] readFile, readFileSync - 리눅스와 윈도우간 차이점

문제점 및 증상 윈도우 환경에서 개발할 때 전혀 문제 없던 것이 리눅스 운영 환경으로 배포하였더니, 윈도우에서 발생하지 않던 오류가 발생하였습니다. 프론트 스크립트 파일의 문자열에 문자열 처리에 오류가 발생하였는데, 핸들바 템플릿을 통하여 전달된 문자열에 들어 있으면 안되는 "\n" 문자가 포함되어 브라우저에서 문법 오류가 발생하면서 프론트단 전체가 제대로 동작하지 않았습니다. 원인 분석 도저히 이해가 되지 않는 현상이라, 아래와 같은 간단한 프로그램을 작성하여 시험해 보았습니다. let fs = require('fs') let data_list = fs.readFileSync(process.cwd() + '/data_list.txt').toString() console.log(data_list) con..

[javascript] 실수를 정수형으로 바꾸기(소수점 버리기)

자바스크립트에서 실수를 정수형으로 바꿀 때, 주로 Math의 round(), floor(), ceil() 함수들을 이용했습니다. 그런데, 우연히 실수형 변수에 "| 0"을 하는 문법을 보고 도대체 무엇을 하는 코드인지 동작시켜 봤는데, 이게 물건이었습니다. 바로 다음 실행 결과를 보시면 이해가 빠르실 겁니다. >> 1.10 // === Math.floor(1.1) 1 >> -1.10 // === Math.ceil(-1.1) -1 >> 9.90 // === Math.floor(9.9) 9 >> -9.90 // === Math.ceil(-9.9) -9 즉, 실수에 "| 0" 연산을 하면 0보다 작은 음수일 경우에는 ceil() 함수처럼 동작하고 0보다 큰 실수는 floor() 함수처럼 동작합니다. 풀어서 설..

728x90