import Adsense from ”@/components/Adsense.astro”;
Python – Dictionary get 방법
파이썬에서 딕셔너리 값을 가져올 때 사용하는 방법은 2가지로 볼 수 있다.
일단, Dictionary 표기는 다음과 같이 {key:value, key:value, ...} 형태로 표현된다. 중괄호를 쓰고 있다는 것을 명심하자. 난 이거 헷갈려
<div class=“kg-card kg-callout-card kg-callout-card-green”><div class=“kg-callout-emoji”>😊</div><div class=“kg-callout-text”>리스트는 [ value, value, … ] – (가져오는 방법) list[1]
튜플은 (value, value, …) – tuple[1]
딕셔너리는 {key:value, key:value, …} – dict[key]</div>``</div>## 딕셔너리 요소 가져오기 – dict[key]
가장 기본적인 방법이다. 딕셔너리 이름에 키를 바로 적어줘서 값을 가져오는 방법이다.
>>> grade = {'pey': 10, 'julliet': 99}>>> grade['pey']10
키에 해당되는 아이템이 없으면 Exception 이 발생한다.</u>
딕셔너리 요소 가져오기 – get()
get() 함수로 가져오는 방법도 있다.
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}>>> a.get('name')'pey'
키에 해당되는 아이템이 없으면 그냥 None 리턴해 준다.</u>
dict.get(key, default)
없을 때 원하는 기본 값을 설정할 수도 있다. 장점
차이점
위에 설명한 것처럼, Exception 이 싫다면 get() 함수를 반드시 사용해서 데이터를 가져오도록 하자.
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}>>> print(a.get('nokey'))None>>> print(a['nokey'])Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: 'nokey'
참고사이트
- 교과서 사이트
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>02-5 딕셔너리 자료형</div><div class=“kg-bookmark-description”>[TOC] ## 딕셔너리란? 사람은 누구든지 이름 = 홍길동, 생일 = 몇 월 며칠 등으로 구별할 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 …</div><div class=“kg-bookmark-metadata”><span class=“kg-bookmark-author”>위키독스
</span>``</div>``</div><div class=“kg-bookmark-thumbnail”></div></figure>
Python – isdigit(), isnumeric(), and isdecimal()
비슷한 숫자 판단 함수들! 누군가 아주 쉽게 테이블로 정리해 뒀어요. 감사감사 😁
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>Choose Between Python isdigit(), isnumeric(), and isdecimal() • datagy</div><div class=“kg-bookmark-description”>Learn how to use the Python isdigit, isnumeric, and isdecimal methods to check whether or not a string is a number and their differences.</div><div class=“kg-bookmark-metadata”><span class=“kg-bookmark-author”>datagy
</span><span class=“kg-bookmark-publisher”>Nik</span>``</div>``</div><div class=“kg-bookmark-thumbnail”></div></figure>- 그냥 10진수 숫자를 뽑아내려면 isdecimal() 로 확인하면 되고,
- 분수나 승수 같은 것을 표현한 숫자 문자열도 확인하려면 isdigit()
- 예전 로마자 숫자 등등의 숫자와 연관된 문자열까지 확인하려면 isnumeric()
표로 정리해 두셔서 아주 좋은 글, 직접 들어가서 확인하시면 저자가 좋아하시겠네요 🙂
| String Type | Example | Python<span> </span>.isdecimal() | Python<span> </span>.isdigit() | Python<span> </span>.isnumeric() |
|---|---|---|---|---|
| Base 10 Numbers | '0123' | True | True | True |
| Fractions and Superscripts | '⅔', '2²' | False | True | True |
| Roman Numerals | 'ↁ' | False | False | True |
Python – libpng warning: iCCP: known incorrect sRGB profile 에러 해결
libpng warning: iCCP: known incorrect sRGB profile 이런 에러가 아니라 경고가 뜨는데, 머 그냥 넘어가도 그림이 보이는 데는 문제가 없었는데 그냥 찝찝해서 찾아봄
먼가 파일에 포함된 코드 일부가 profile에서 지원되지 않는 것 머 이런거라는 설명이 있는데, 해결책은 아래 코드로 해당 파일을 읽어, 파이썬에서 제공되는 png 라이브러리로 파일을 변환해서 사용하면 될 듯
다른 실행 파일로 변환하는 방법도 많이 있던데, 머 코딩중이니깐 아래 코드를 임시로 돌려서 1.png 2.png 파일을 만든다음, 이 코드는 주석처리 해 버리면 되니깐 🙂
pixmap = QPixmap()pixmap.load(":/icon/err_icon.png")file = QFile("1.png")file.open(QIODevice.WriteOnly)pixmap.save(file, "PNG")pixmap = QPixmap()pixmap.load(":/logo/err.png")file = QFile("2.png")file.open(QIODevice.WriteOnly)pixmap.save(file, "PNG")
- 파일 사이즈가 좀 줄긴 하네
- 😅😅 워닝 제거가 안되네…ㅋㅋㅋ 좀 더 파봐야 할 듯~~
- 아래 참고 사이트 글을 참고하셔서 아예 파일 변환으로 해보세요~~
참고 사이트
- 기본 코드와 다른 솔루션도 소개되어 있는 QA 글.
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>libpng warning: iCCP: known incorrect sRGB profile</div><div class=“kg-bookmark-description”>I’m trying to load a PNG image using SDL but the program doesn’t work and this error appears in the console libpng warning: iCCP: known incorrect sRGB profile Why does this warning appear? What</div><div class=“kg-bookmark-metadata”><span class=“kg-bookmark-author”>Stack Overflow
</span><span class=“kg-bookmark-publisher”>Reza Karami</span>``</div>``</div><div class=“kg-bookmark-thumbnail”></div></figure>- mogrify 을 이용한 변환 – 원본 파일 백업이 필수!!
서버리스 장고 – AWS Lambda framework 자료 조사
파이썬 기반의 서버리스 API 혹은 장고 platform을 구축할 수 있다는 Zappa! 관심 키워드로 두고 검색을 해보고 있음
서버 운용자 없이 그냥 코드만 관리하려면, 서버리스로 웹서버나 장고를 돌릴 수 있으면 베스트 인데, 소규모 스타트업 경우는 그냥 하나 띄워두고 자기 서비스에 집중할 수 있다니 한번 테스트 베드라도 구축해 두면 여러모로 도움이 될 듯!
그런데, 서버리스를 한다고 치자…Zappa 와 같은 또 쓰이게 되는 프레임워크의 필요성은 아래 글에서 참고하자. Zappa 대신 더 유명하다는 Serverless framework 사용기
Serverless
https://squarelab.co/blog/developing-internal-service-with-serverless-aws/
AWS Lambda + AWS API Gateway를 이용하여 직접 서버 인스턴스를 띄우지 않고서도 서버 기능을 할 수 있다는 사실은 많이 알려져 있습니다. 하지만 막상 이걸 직접 설정 해보려고 하면 해야할 일이 산더미 같습니다. 실제 코드를 작성해서 Lambda에 업로드해야하고, Lambda를 누가 실행 할 수 있는지 적당한 권한을 설정해줘야 하며, API Gateway와 Lambda를 연결해줘야하고, 사용자 지정 도메인도 연결해줘야하며, CloudWatch 로그 설정도 … (중략). 슬슬 오히려 EC2 인스턴스를 그냥 띄워서 하던대로 하는게 낫지 않을까 생각이 들기 시작하네요.
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>Serverless한 회사 내부 서비스 만들기</div><div class=“kg-bookmark-description”>사내에서 사용되는 서비스의 경우 대중을 대상으로 하지 않기 때문에 사용량이 많지 않은 경우가 대부분입니다. AWS Lambda를 사용하면 비용 절감뿐만 아니라 서버를 직접 관리하고 운영할…</div><div class=“kg-bookmark-metadata”><span class=“kg-bookmark-author”>Square Lab 블로그
</span><span class=“kg-bookmark-publisher”>권영재|Feb 10, 2020</span>``</div>``</div><div class=“kg-bookmark-thumbnail”></div></figure>### AWS 전용 프레임워크 – AWS Chalice 예제
Native python packaging 으로 아래 주소에 설명서가 있어요. 기왕 AWS 의존적이라면, 제공해주는 프레임워크를 쓰는 것도
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>Todo Application — AWS Chalice</div><div class=“kg-bookmark-description”></div><div class=“kg-bookmark-metadata”></div>``</div><div class=“kg-bookmark-thumbnail”></div></figure>## 단점
단점이라는 것을 한 번 살펴볼 필요가 있지만…암껏도 없는 소규모 서비스의 경우 백만건 도달할 수나 있나…
- vendor lock-in
특정 vendor의 독자적 기술에 크게 의존한 제품, 서비스, 시스템 등을 채용했을 때 다른 vendor가 제공하는 동종 제품, 서비스, 시스템 등으로 갈아타기 어렵게 되는 현상
https://gnidoc.tistory.com/entry/AWS-Serverless-웹서비스-구축-경험-후기1탄
frontend는 react, backend는 django, DevOps는 terraform 등을 사용하여 최대한 오픈소스를 활용하여 vendor lock-in을 최대한 피했습니다
- 누가 먼저 죽나…
- Django 기반 프로젝트, Django template Frontend 구현
- PostgreSQL 그냥 DB 사용 – 클라우드 플랫폼 의존성이 덜한
2. 기술 이전
쿠버네티스 이런걸 쓰고 싶다!!
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>쿠버네티스 ① 메인 K8s component (1)</div><div class=“kg-bookmark-description”>인프라 내용을 학습할 때 항상 나오는 쿠버네티스…! 간단하게나마 알면 도움이 될 것같아 영상을 보고 학습하였다. 💪 학습 내용의 출처는 모두 아래 두영상이다! 🙌 참고한 영상 👇🏼 https://www.youtube.com..</div><div class=“kg-bookmark-metadata”><span class=“kg-bookmark-author”>TISTORY
</span><span class=“kg-bookmark-publisher”>dodop</span>``</div>``</div><div class=“kg-bookmark-thumbnail”>![]()
</div></figure>- 아직은…
- 미래에도…
- 이런 일이…
3. 운영에러
모르고 쓰게 되니깐 위험해…먼가 두려움이
이러한 툴을 사용하여 프로비저닝을 자동화하기 전에 AWS에서 리소스를 프로비저닝하는 방법을 이해해야 합니다. 예를 들어 Serverless Framework 또는 AWS SAM 을 사용하는 경우 AWS CloudFormation의 작동 방식과 프레임워크의 기능을 이해해야 합니다. 툴이 작동하는 방식을 이해하지 않고 툴에 의존하게 되면 문제가 발생했을 때 이를 해결하는 방법을 모르기 때문에 위험합니다.
확실한 이해 없이 자동화해서는 안 됩니다.
참고 사이트
- Zappa 찾아보게 된 계기
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>Zappa를 활용하여 Django 배포하기</div><div class=“kg-bookmark-description”>Zappa를 활용하여 Django 프로젝트를 API Gateway + Lambda를 활용한 서버리스 아키텍쳐로 배포하는 과정에 대해 공유합니다.</div><div class=“kg-bookmark-metadata”><span class=“kg-bookmark-author”>Ram’s
</span><span class=“kg-bookmark-publisher”>Raemin</span>``</div>``</div><div class=“kg-bookmark-thumbnail”>![]()
</div></figure>- 2022 최근 글
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>Zappa로 서버리스 배포</div><div class=“kg-bookmark-description”>zappa를 이용한 lambda 배포 방법 (python + django + RDS(postgresql))</div><div class=“kg-bookmark-metadata”></div>``</div><div class=“kg-bookmark-thumbnail”></div></figure>- API 게이트웨이 예제 프로젝트
<figure class=“kg-card kg-bookmark-card”><div class=“kg-bookmark-content”><div class=“kg-bookmark-title”>Zappa를 이용한 Serverless 배송 조회 API 구현</div><div class=“kg-bookmark-description”>캐시슬라이드에는 상품을 구매하면 리워드를 적립 받을 수 있는 쇼핑하고 적립받기라는 서비스가 있습니다. 쇼핑하고 적립받기는 계속해서 신규 기능을 붙여가면서 점점 이커머스답게 성장해가고 있습니다. 그 과정에 통합적으로 사용할 기능을 Serverless…</div><div class=“kg-bookmark-metadata”><span class=“kg-bookmark-author”>nbt-tech
</span><span class=“kg-bookmark-publisher”>전준호</span>``</div>``</div><div class=“kg-bookmark-thumbnail”></div></figure>- 구조 그림이 예술
파이썬 – QMessageBox text 복사 가능하게
메시지 박스의 텍스트를 복사해서 쓰려고 했더니, 기본적인 메시지 박스는 마우스 드래그가 불가능!
솔루션이 있을까 검색 후, 결과 남기기
msgBox = QMessageBox(self)
msgBox.setIcon(QMessageBox.Information)
msgBox.setText(f"Loaded config data from {fileName[0]}.\n" + _skip_message)
msgBox.setWindowTitle("Information")
msgBox.setTextInteractionFlags(Qt.TextSelectableByMouse)
msgBox.setStandardButtons(QMessageBox.Ok)
msgBox.show()
그냥 띄우지 말고, msgBox.setTextInteractionFlags(Qt.TextSelectableByMouse) 이 옵션을 주면 메시지 부분을 긁어서 복사할 수 있다.
<figure class=“wp-block-image aligncenter size-full”><figcaption class=“wp-element-caption”>텍스트 복사 가능한 QMessageBox
</figcaption>``</figure>## 참고 사이트
- https://stackoverflow.com/questions/32589776/qmessagebox-you-can-select-text-from
- https://pythonbasics.org/pyqt-qmessagebox/
- https://www.programcreek.com/python/example/108068/PyQt5.QtWidgets.QMessageBox <- 스코롤 까지 가능하게끔 하는 코드, 페이지에서 scroll을 검색하시오.
<div class=“wp-block-stackable-columns alignwide stk-block-columns stk-block stk-378a2d0” data-block-id=“378a2d0”><div class=“stk-row stk-inner-blocks stk-block-content stk-content-align stk-378a2d0-column alignwide”><div class=“wp-block-stackable-column stk-block-column stk-block-column—v2 stk-column stk-block stk-daaf534 stk-block-background” data-block-id=“daaf534”><style>.stk-daaf534{padding-top:64px !important;padding-bottom:64px !important}</style><div class=“stk-column-wrapper stk-block-column__content stk-container stk-daaf534-container stk—no-background stk—no-padding”><div class=“stk-block-content stk-inner-blocks stk-daaf534-inner-blocks”><div class=“wp-block-stackable-heading stk-block-heading stk-block stk-4949b94” data-block-id=“4949b94” id=“call-to-action”>## Call to Action
</div><div class=“wp-block-stackable-text stk-block-text stk-block stk-6e16dff” data-block-id=“6e16dff”>템플릿 블록 테스트 까지
</div><div class=“wp-block-stackable-button-group stk-block-button-group stk-block stk-07ee3e9” data-block-id=“07ee3e9”><div class=“stk-row stk-inner-blocks stk-block-content stk-button-group”><div class=“wp-block-stackable-button stk-block-button stk-block stk-9eca50c” data-block-id=“9eca50c”><a class=“stk-link stk-button stk—hover-effect-darken” href=""><span class=“stk-button__inner-text”>Button Text</span></a></div><div class=“wp-block-stackable-button stk-block-button is-style-ghost stk-block stk-d95f882” data-block-id=“d95f882”><style>.stk-d95f882 .stk-button{background:transparent !important}.stk-d95f882 .stk-button:hover:after{background:transparent !important;opacity:1 !important}:where(.stk-hover-parent:hover,.stk-hover-parent.stk—is-hovered) .stk-d95f882 .stk-button:after{background:transparent !important;opacity:1 !important}.stk-d95f882 .stk-button:before{border-style:solid !important}</style><a class=“stk-link stk-button stk—hover-effect-darken” href=""><span class=“stk-button__inner-text”>버튼</span></a></div>``</div>``</div>``</div>``</div>``</div><div class=“wp-block-stackable-column stk-block-column stk-block-column—v2 stk-column stk-block stk-0585030 stk-block-background stk—has-background-overlay” data-block-id=“0585030”><style>.stk-0585030{background-image:url(https://d3gt1urn7320t9.cloudfront.net/library-v3/section-wireframes-call-to-action-3/d7a363e397fc.png) !important}</style><div class=“stk-column-wrapper stk-block-column__content stk-container stk-0585030-container stk—no-background stk—no-padding”><div class=“stk-block-content stk-inner-blocks stk-0585030-inner-blocks”><figure class=“wp-block-image size-large”></figure>``</div>``</div>``</div>``</div>``</div>
Python 파일 입출력 정리 – 한글, 인코딩
파이썬 파일 만들고 쓰고 읽고, 할때 마다 맨날 찾네.
한글 때문에 인코딩이 중요한 이슈 인듯! 아래 잘 정리된 사이트로 고고
https://24hours-beginner.tistory.com/115
# 한글깨짐 방지 ENCODING UTF-8
file = open("test.txt", "w", encoding="UTF-8")
file.write("내용입력")
file.close()
# 한글깨짐 방지2 ENCODING UTF-8
# txt는 UTF-8로도 충분한데 csv는 UTF-8로만 하면 읽을땐 다른걸로 읽을 경우 깨짐 현상 발생
file = open("test.csv", "w", encoding="UTF-8-sig")
file.write("test,test,test\n")
file.write("잘되나,안된다,오된다\n")
file.close()