개발/python
[Python] Service Account로 구글 스프레드시트 업데이트하기
2019.04.15읽지 않아도 되는 서론; 구글 시트를 업데이트하려면 당연히 별도의 인증절차가 필요하다. 업데이트하려는 자가 그 시트에 대한 접근 권한이 있는지 알아야 하기 때문이다. 이건 시트 공유 설정을 '링크가 있는 모든 사용자가 수정할 수 있음'으로 해도 마찬가지다. 한편 구글에서 제공한 Python Quickstart를 보면 OAuth 2.0 클라이언트 인증을 사용하는데, 이렇게 하면 유저가 구글 로그인을 해서 권한을 얻어 시트를 열거나 수정할 수 있다. 다만 내 시트를 내가 수정하는 경우 이 방법을 사용하면 매우 귀찮다는 생각이 든다. 유저 정보가 필요한 게 아니고 내 애플리케이션을 가지고 작업하는 거니까. 물론 별도의 작업을 거쳐 OAuth 클라이언트로도 로그인 없이 작업을 수행할 수 있지만 약간 번거롭다. ..
[Python] BeautifulSoup로 웹사이트 크롤링하기
2019.04.02TL;DR 2016년 BeautifulSoup로 YouTube에서 영상 정보를 크롤링 해보자 라는 글을 올린 적 있는데 이게 의외로 스테디셀러(?)라 2019년 버전으로 업데이트하고자 한다. 초심자들을 위한 글이기 때문에 난이도는 굉장히 낮다. 다만 그동안 유튜브의 HTML 구조가 바뀌어서 초심자가 크롤링하기에는 좀 번거롭고 향후 또 변경될 여지가 많아 대상을 프로젝트 오일러 한국 사이트로 변경했다. 이곳을 선택한 이유는 관리자들이 사이트를 절대 업데이트하지 않아서(ㅋㅋㅋ). 근데 그전에 이 사이트가 크롤링을 허용하는지부터 알아보자. 대부분의 사이트는 그들의 루트 경로 아래에 robots.txt라는 파일을 두어 크롤링에 대한 규약을 써놓는데, 보통 크롤링을 허용하거나 허용하지 않는 페이지들이 적혀있다. ..
[Python] 잘 알려져 있지 않은 파이썬 기능
2019.03.19'Hidden features of Python' 언젠가 스택오버플로에서 찾았는데, 파이썬에서 잘 알려져 있지 않은 기능을 공유하는 글이다. (다만 스택오버플로의 취지에는 맞지 않는 질문이라 지금은 close 됨)한 번에 읽기에는 좀 길어서 북마크해뒀었는데 가끔 보면서 흥미로운 게 있으면 적어놨다. Function argument unpacking 별표(*;asterisk) 연산자를 사용하여 리스트나 딕셔너리를 언패킹할 수 있다.>>> a = [1, 2, 3, 4, 5] >>> print(*a) 1 2 3 4 5 >>> b = {'a': 1, 'b': 2, 'c': 3, 'd': 4} >>> print(*b) a b c d오와!했지만 손이 안 가서 쓰지 않는다.아웃! C 스타일 코딩을 가능케 하는 모듈 ..
[Python] generator와 yield
2019.02.18# generator란?파이썬의 generator란 yield라는 키워드를 사용하는 iterator 생성 함수이다. * iterator란 countable한 값들을 가지고 있는 객체이다. 이 iterator가 iterate 된다는 것은 모든 값을 가로지를 수 있음을 뜻한다. 파이썬에서 iterator는 iterator 프로토콜을 시행하는 객체이며, __iter__()와 __next__() 메소드를 가지고 있다. # generator 함수 생성generator를 만드는 방법은 간단하다. 평범한 함수에서 return 대신 yield 키워드를 사용하면 된다. 함수가 하나 이상의 yield를 가지고 있다면 generator 함수가 된다. 한편 yield와 return은 모두 같은 값을 리턴하지만, return은..
Python3.6에서는 dict가 입력순으로 정렬된다.
2019.02.15(스택오버플로 질문 Are dictionaries ordered in Python 3.6+?의 답변을 참고했다.) '''# 읽지 않아도 되는 서론회사에서 random 함수가 사용된 함수를 테스트하다가 신기한 점을 발견했다. 내 컴퓨터(Python3.6)에서는 마냥 잘 되던 테스트가 다른 컴퓨터(Python3.5)에서는 계속 실패했던 것이다. 하지만 가끔 통과되는 경우도 있어서 영문을 몰랐는데 알고보니 딕셔너리의 정렬 여부 때문이었다.import random random.seed(1) dict_a = {'a': 1, 'b': 2, 'c':3, 'd':4, 'e':5} key = random.choice(list(dict_a.keys())) # 딕셔너리 키 값중 하나를 랜덤으로 선택 할당 assert key..
celery 에러 핸들링
2019.02.13# AttributeError async & KeyError asynckombu와 celery의 버전이 충돌하는 것이니, celery 버전을 4.2.1로 업데이트한다.GitHub celery 이슈에 있더라.(KeyError async #870)celery와 버전이 엮인 라이브러리는 billiard, kombu, amqp, vine이다.Collecting celery==4.1.1 Downloading https://files.pythonhosted.org/packages/99/fa/4049b26bfe71992ecf979acd39b87e55b493608613054089d975418015b7/celery-4.1.1-py2.py3-none-any.whl (394kB) 100% |██████████████████..
not not not not not True
2019.02.12스택오버플로 돌아다니다가 누가 not not True를 사용한 걸 봐서 한 번 써봤다.not이 어느 정도 길어져야 메모리에 영향을 줄까?
[Python] Python으로 SMS 보내는 방법
2019.02.08Python으로 SMS를 보내는 방법을 3가지로 추려보았다. - AWS SMS - Twilio - 국내 서비스(쿨SMS) AWS SMS 기본 개념 주제: 주제는 메시지 전송 및 알림 구독을 위한 커뮤니케이션 채널 구독: 구독 대상자는 HTTP/HTTPS, Email, SMS, Amazon SQS, Lambda 등이 될 수 있다. 이 구독 시스템을 통해 한 주제를 전체 구독자에게 배포할 수 있다. key-value 형식으로 메시지 커스터마이징이 가능함 주의 서울 리전은 SMS 메시징이 지원되지 않음. 지원되는 리전 참고. 설정 SNS에서 문자 메시지(SMS) 카테고리 선택 후 문자 메시지 기본 설정 업데이트 - 유형에 따라 요금이 다를수도 있음(프로모션-중요도가 덜한 메시지 / 트랜잭션-중요한 메시지) -..
<파이썬; 코딩의 기술> 파이썬다운 생각
2019.02.07이라는 책에서 1장 '파이썬다운 생각'을 요약해봤다.참고로 python3 기준이다. 사용 중인 파이썬의 버전을 알자요즘은 대부분 python3을 사용하니 이 부분은 넘어가도 될 듯하다.새로운 프로젝트를 시작한다면 python3을 사용할 것을 권장한다. PEP 8 스타일의 가이드를 따르자파이썬 개선 제안서(Python Enhancement Proposal) #8, 다른 말로 PEP 8은 파이썬 코드를 어떻게 구성할지 알려주는 스타일 가이드다.일관성 있는 코드를 짜서 유지보수성과 가독성, 그리고 협업 가능성을 높이자. bytes, str, unicode의 차이점을 알자python3에서 bytes는 8비트 값을 저장하고, str은 유니코드 문자를 저장한다.python2에서 str은 8비트 값을 저장하고, un..
[python] is 와 == 의 차이점
2017.10.27나는 비교 대상이 None이 아닌 이상 대체로 ==를 사용하기 때문에 이 둘의 차이점을 깊게 생각해본 적이 없다. 근데 오늘 스택오버플로우를 서핑하다가 이와 관련된 글이 눈에 띄어서 읽어봤는데 재밌었다. is는 reference equality. 메모리 상의 두 object를 비교한다. 두 reference가 같은 object를 가리키는지 확인할 수 있다. ==는 value equality. 값을 비교한다. 두 object가 같은 값을 가지는지 알 수 있다. 예시를 보자. >>> foo = 10 >>> dir(foo) == dir(10) True >>> dir(foo) is dir(10) False 동일한 변수의 dir()을 가져왔음에도 이들은 같은 값을 가질 뿐, 같은 object는 아니기 때문에 is..
[python] print와 return의 차이점
2017.10.27print와 return은 모두 function이 아닌 statement다. 뭐 이건 제쳐두고, print와 return의 가장 큰 차이점은 함수 및 프로그램에 영향을 주느냐 마느냐이다. print는, 그저 값을 출력할 뿐, 컴퓨터가 이 값을 가지고 무얼 하진 못한다. 변수가 어떤 값을 가지는지 사용자 측에서 편하게 보기 위함이지 함수에는 전혀 영향을 끼치지 않는다. return은, 함수가 값을 반환하는 가장 주된 방법이다. 모든 함수는 어떠한 값을 return하며, 이 return(혹은 yield)이 명시되어 있지 않은 경우에는 None을 return한다. 이 반환된 값은 다른 함수에서 사용될 수 있으며 변수에 저장될 수도 있다. def function_that_prints(): print("I pri..
[python] Python을 web에서 컴파일하는 여러 가지 방법
2017.09.130. pypy.jshttps://github.com/pypyjs/pypyjs (1,135 stars) input()을 하면 EOFError를 일으킨다! 1. brythonhttp://brython.info/index.html (공식 사이트가 느리고 허접하다. 그래도 에디터나 콘솔을 테스트해볼 수 있음) https://github.com/brython-dev/brython (1,308 stars)만약 웹에서 파이썬 에디터나 콘솔을 만들고 싶다면 pypy.js보다는 이걸 더 추천한다. 사용한 지 좀 돼서 가물가물하긴 하지만, pypy.js보다 사용 방법이 더 간단하고 input()처리가 가능하다. 다만 input()을 웹 alert 창으로 받아서...좀 읭스럽긴 하다. html에 이렇게 brython.js를..