일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 매터
- Bestin
- 해외주식
- 퀄컴
- RS-485
- 코스피
- Python
- 현대통신
- homebridge
- 티스토리챌린지
- 국내주식
- 월패드
- MQTT
- raspberry pi
- 나스닥
- Home Assistant
- 애플
- 파이썬
- 오블완
- 홈네트워크
- 미국주식
- ConnectedHomeIP
- 힐스테이트 광교산
- Apple
- matter
- 배당
- 공모주
- Espressif
- 엔비디아
- esp32
- Today
- Total
목록Python (62)
YOGYUI
파이썬에서 공통으로 사용되는 구문들은 decorator를 활용해서 코드를 간소화할 수 있다 decorator를 활용한 로깅 예시는 다음과 같다 import logging def log(func): """ Log what function is called """ def wrap_log(*args, **kwargs): name = func.__name__ logger = logging.getLogger(name) logger.setLevel(logging.INFO) # add file handler fh = logging.FileHandler("%s.log" % name) fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' formatter = log..
공공데이터포털 Open API 목록을 훑어보던 중, 한국전력공사에서 제공하는 '전기차 충전소 운영정보'가 있어서 한번 구현해봤다 내년에 새 집 입주할 때 잔금 다 치르고 자금상황이 좀 안정화되면 전기차 한 대 뽑을까 계획중인데, 충전소 관련된 어플을 직접 만들어볼까 고민중~ 1. 공공데이터포털 API 활용신청 데이터 타이틀은 "한국전력공사_전기차 충전소 운영정보", URL은 아래 링크 참고 https://www.data.go.kr/iim/api/selectAPIAcountView.do API 활용신청(방법은 링크 참고)하고 인증키 획득 서비스 URL: http://openapi.kepco.co.kr/service/EvInfoServiceV2/getEvSearchList 요청 변수는 다음과 같다 특정 주소..
QDoubleSpinbox는 실수형 값을 위한 스핀박스인데, 더블클릭 시 다음과 같이 소수점을 기준으로 좌측 혹은 우측 영역만 선택된다 > 전체 값을 선택하고 싶을 때 불편한 경우가 간혹 발생한다 더블클릭 시 전체 영역을 선택하게 하기 위해서는 스핀박스 내부의 QLineEdit 객체를 커스터마이즈해줘야 한다 QLineEdit의 mouseDoubleClickEvent 시그널을 오버라이드해서 마우스 좌클릭일 경우 전체 텍스트를 선택하게 하는 selectAll() 메서드를 호출하면 된다 [예제 코드] from PyQt5.QtCore import * from PyQt5.QtWidgets import * class CustomLineEdit(QLineEdit): def __init__(self, parent=No..
QTableWidget의 Column 헤더 라벨(텍스트)는 setHorizontalHeaderLabels(List[srt]) 메서드로 한번에 수정할 수 있지만, 설정된 라벨들을 한번에 가져오는 인터페이스는 내가 알기론 구현되어 있지 않다 대신, horizontalHeaderItem(int) 메서드를 통해 각 열의 헤더에 할당되어 있는 QTableWidgetItem을 호출한 뒤 text() 메서드로 각 열 헤더의 라벨을 가져올 수 있다 [예제 코드] if __name__ == '__main__': import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * app = QCoreApplication.instance() if app is None: ..
회사에서 사원별 공수(Man Hour) 관리 프로그램을 하나 만들었는데, 공휴일에는 입력이 안되게 만드는 기능이 필요하게 됐다 파이썬 써드파티 라이브러리 종류도 몇 개 있어 찾아봤는데, 중국의 국경일을 기반으로 한국의 실정에 맞게 변환해야 하는 경우가 대부분이라 번거로울 뿐만 아니라 대통령 선거같은 이벤트나 임시공휴일은 유저가 따로 입력해야 하는 불편함이 있다 확실한 건 웹크롤링인데, (ex: 주식시장 개장일) 공공데이터포털에서도 API 몇 개가 공개되어 있어서 그 중 한개를 사용하도록 했다 1. 공공데이터포털 API 활용신청데이터 타이틀은 "특일 정보", URL은 아래 링크 참고https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk..
파이썬 3.10에 마침내 C, C++의 switch/case문과 유사한 문법이 추가된다고 한다 PEP 634은 구조적 패턴 매칭(Structural Pattern Matching)이라 하여 switch/case문과 유사한 match/case 문법에 대한 내용을 담고 있다 해당 내용은 다음 기사에서 최초로 접했다 (3월5일 기사니 꽤 뒷북인 느낌 ㅎㅎ) www.ciokorea.com/news/185423 파이썬 3.10의 새 '패턴 매칭'이 할 수 있는 일 파이썬(Python)은 강력하고 인기가 높지만, 다른 언어에는 있는 플로우 제어(flow control)가 결여되어 있었다. 이는 하나의 값을 가져와, 여러 가능한 조건 중 하나에 대해 명쾌하게 매칭 할 수 있는 www.ciokorea.com C, C+..
1. Introduction 지난 2월 24일 빅데이터분석기사 필기시험 1회 응시 접수자를 대상으로 2회 시험 고사장 우선 변경 이벤트가 있었다 (1회 시험은 코로나19 확산때문에 취소됐었는데... 2회도 무사히 치러질지도 의문 ㅠ) www.dataq.or.kr/www/board/view.do?bbsKey=eyJiYnNhdHRyU2VxIjoxLCJiYnNTZXEiOjUwODA1MX0=&boardKind=notice 데이터자격시험 www.dataq.or.kr ※ 경기 지역 거주자들은 서울에서 치뤄야만 하는 슬픈 현실... 수원에서 제일 가까운 수험장을 찾아야하는데, 사이트가 제공하는 웹 UI는 한번에 하나의 고사장만, 그것도 아주 좁은 지역만 확대된 채로 보여줘서 (줌아웃도 안된다...뭔 API를 쓴거야...
몇달전에 Netflix에서 방영하는 오리지널 다큐멘터리 "커넥티드: 세상을 잇는 과학" (영문명 connected: The Hidden Science of Everything) 중 4화 '수의 법칙'을 보고 충격을 받은 적이 있어 그 내용을 정리해보고자 한다 ※ 6화 모두 엄청 재밌다, 강력 추천! 포스트 작성한다고 2번을 다시 돌려봤다 제목인 '수의 법칙' 답게 하나의 수학 공식(법칙?)에 대한 내용을 다루고 있는데, 법칙의 이름은 바로 '벤포드의 법칙' (Benford's Law) 내 나름대로는 수학이나 공학 지식이 풍부하다고 자부하는데 이 법칙은 완전히 처음 접해봤는데다가 실생활에서 광범위하게 활용된다고 하니 꽤 놀라웠다 내가 이해한대로 설명하면 장황해질 수 있으니 위키피디아의 정의를 그대로 옮겨적..
공공데이터포털에서 국내 코로나19 감염현황에 대한 데이터를 얻어보자 (OpenAPI 실습) 데이터 타이틀은 "보건복지부_코로나 19 감염_현황"이고 URL은 아래 링크를 참고 www.data.go.kr/data/15043376/openapi.do RESTful API로 호출하여 XML 포맷으로 데이터를 받아볼 수 있을 것 같다 1. 데이터 활용신청 로그인 후 페이지 내 "활용신청" 버튼을 클릭 후 개발계정 신청서를 작성하자 승인되면 다음과 같이 API가 활용가능한 것으로 디스플레이된다 (원래 사용하는 계정은 신청/활용건수가 너무 많아 포스팅을 위해 계정을 새로 하나 만들었다...) 개발계정 상세보기로 가면 실제 API에서 사용해야 할 Key (일반 인증키)를 얻을 수 있다 Key값 (일반인증키)는 API..
[ Web Crawling (Python) ] 지난 포스트에서 동행복권 로또6/45 당첨번호를 웹크롤링해봤다 yogyui.tistory.com/entry/PythonBeautifulSoup-%EB%A1%9C%EB%98%90-645-%EB%8B%B9%EC%B2%A8%EB%B2%88%ED%98%B8-%ED%81%AC%EB%A1%A4%EB%A7%81 Python::BeautifulSoup - 동행복권 로또 6/45 당첨번호 크롤링 [ Web Crawling (Python) ] 동행복권 사이트에서 로또 6/45 역대 당첨번호들을 크롤링한 뒤 DB에 저장해보자 동행복권 메인 사이트 동행복권 당첨번호 3 4 15 22 28 40 보너스번호 10 1등 총 당첨금 263억원(8명 yogyui.tistory.com 메인..
[ Web Crawling (Python) ] 동행복권 사이트에서 로또 6/45 역대 당첨번호들을 크롤링한 뒤 DB에 저장해보자 동행복권 메인 사이트 동행복권 당첨번호 3 4 15 22 28 40 보너스번호 10 1등 총 당첨금 263억원(8명 / 33억) 이전 회차 당첨정보 보기 다음 회차 당첨정보 보기 dhlottery.co.kr 1. 최신 회차 크롤링 동행복권 메인 페이지에 접속하면 좌측 상단에 최신 회차 및 당첨번호를 확인할 수 있다 고민할 것 없이 바로 requests 사용해서 GET method로 HTTP 요청을 넣은 후 html 코드를 읽어보자 import requests url = "https://dhlottery.co.kr/common.do?method=main" html = reques..
[ Web Crawling (Python) ] 기상청 날씨누리 사이트의 '도시별 현재날씨' 정보를 pandas DataFrame 객체로 저장해보자 www.weather.go.kr/weather/observation/currentweather.jsp 도시별 현재날씨 > 지상관측자료 > 관측자료 > 날씨 > 기상청 홈 > 관측자료 > 지상관측자료 > 도시별 현재날씨 |날씨|관측자료|지상관측자료|도시별 현재날씨 기상실황표2021.02.07.16:00 기상실황표 강릉 6.6 7.1 1.9 4.7 70 북서 1018.9 강진군 4.0 12 www.weather.go.kr 1. HTML GET requests 라이브러리를 사용해 해당 url의 html을 가져온다 import requests from bs4 impo..
Flowchart를 웹에서 보여줘야 할 필요가 생겨서 이리저리 검색하다가 python, matplotlib 기반 라이브러리인 schemdraw를 한번 써보기로 했다 schemdraw.readthedocs.io/en/latest/ Schemdraw documentation — SchemDraw 0.8 documentation schemdraw.readthedocs.io 전자회로, 논리회로, 신호처리 등 다양한 종류의 schematics를 그리기 위한 Element들이 구현돼있다 (Latex도 지원되는듯) 예제코드를 보면 알겠지만, 한땀한땀 노가다로 코딩해줘야된다 사용성을 높이려면 고수준의 커스터마이징이 필요할 것 같다 각설하고, 다음과 같이 Flowchart도 어렵지 않게 구현할 수 있다 # test.py..
3. Implementation 우선, 256개 Timestamp에 대한 하행 호출 패킷을 모으기 위해 다음과 같이 코드를 짜봤다 (패킷을 리스트에 담는데, 동일한 timestamp 값을 모은적이 있다면 패스, 리스트 자체를 직렬화해서 로컬에 저장) import os from SerialComm import SerialComm from SmartParser import SmartParser if __name__ == '__main__': import time import pickle picklepath = './smart_elevator_down_packets.pkl' os.system('clear') ser1 = SerialComm() ser2 = SerialComm() par = SmartParser..
나중에 시간날때 Git에 올려야겠다... [Structure] ---- -------- Define.py -------- Threads.py -------- SerialComm.py # Define.py import datetime import threading def checkAgrumentType(obj, arg): if type(obj) == arg: return True if arg == object: return True if arg in obj.__class__.__bases__: return True return False class Callback(object): _args = None _callback = None def __init__(self, *args): self._args = a..