티스토리

꿀벌개발일지
검색하기

블로그 홈

꿀벌개발일지

ohgyun.com/m

천천히, 그러나 끊임없이.

구독자
2
방명록 방문하기

주요 글 목록

  • Error: pg_config executable not found 발생일: 2019.04.05 키워드: psycopg2, pg_config 문제: 얼마 전, 파이썬 배치 작업들이 모두 실패했다. 오류 문구는 아래와 같다. Collecting psycopg2 Using cached https://files.pythonhosted.org/packages/c7/ca/75236b17f1b951950ffc55d657c5aa408d3d0327a1b6c4c0f7cb16ef7e7b/psycopg2-2.8.tar.gz Complete output from command python setup.py egg_info: running egg_info creating pip-egg-info/psycopg2.egg-info writing pip-egg-info/psycopg2.egg-info/.. 공감수 3 댓글수 0 2019. 4. 13.
  • Python: 정규식으로 문자열을 자를 때, 그룹이 포함되어 있는 경우 발생일: 2017.08.18 키워드: re, 정규식, lookbehind, 그룹, group, regular expression, regex, split 문제: 문자열을 정규식으로 split 할 때, 정규식 구문에 그룹이 포함되어 있었더니 원하는 결과가 나오지 않는다. 왜 그런 걸까? 해결책: split()으로 전달하는 패턴에 그룹이 있으면, 분할한 결과 뒤에 그룹 매칭값이 붙는다. 아래 예제를 보면 쉽게 이해할 수 있다. re.split('-', 'aaa-bbb') -> ['aaa', 'bbb'] re.split('(-)', 'aaa-bbb') # 그룹으로 묶음 -> ['aaa', '-', 'bbb'] # split 결과에 그룹이 포함된다 re.split('(-)', 'aaa-bbb-ccc') # 여러.. 공감수 0 댓글수 0 2018. 10. 30.
  • Pandas: 그룹 내에서 상위 n개 가져오기 발생일: 2018.10.19 키워드: pands, 판다스, groupby, nlargest, nsmallest, sort_values, get n largest value in group 문제: 그룹 내에서 값이 큰 순으로 상위 n개만 가져오려고 한다. 해결책: 이 용도의 nlargest 와 nsmallest API를 제공하고 있다. 하지만, 가장 빠른 방법은 데이터프레임을 원하는 값으로 정렬한 후에 groupby 하고, head 로 가져오는 것이다. id, name, total 로 구성된 데이터프레임이 있고, 각 name의 값을 total 로 정렬해 상위 3개만 가져오고 싶다면 아래와 같이 처리하는 것이 빠르다. df.sort_values(by='total', ascending=False).groupb.. 공감수 2 댓글수 0 2018. 10. 19.
  • conda 환경에서 pip 패키지도 동시에 업데이트 하기 발생일: 2018.10.18 키워드: conda env update, pip install --upgrade, environment.yml, 콘다 환경, 아나콘다, 미니콘다, anaconda, miniconda 문제: 서비스에서는 conda 패키지를 envrionment.yml 파일로 관리하고 있다. 이런 식이다. [environment.yml] name: foo channels: - conda-forge - defaults dependencies: - python=3.7 - ipython - jupyter - pandas - numpy - pip: - konlpy - ... 헌데, conda env update 를 실행해도, 환경 파일에 정의해둔 pip 패키지는 업데이트되지 않는다. 어떻게 해야할까? .. 공감수 1 댓글수 0 2018. 10. 19.
  • Jupyter notebook HTML output에 템플릿 적용하기 발생일: 2018.09.29 키워드: Jupyter notebook, nbconvert to HTML 문제: 작성한 주피터 노트북을 팀내에 공유하거나 배치로 메일 등으로 발송하게 하려고 한다. nbconvert 모듈로 HTML이나 PDF 포맷으로 export 할 수 있다는 건 알고 있다. $ jupyter nbconvert --to html sample.ipynb --output output.html 이렇게 처리했는데, 생성된 HTML이 정말 못생겼다. 좀 예쁘게 바꾸고 싶은데, 어떻게 하면 될까? 해결책: nbconvert 모듈로 export 할 때, --template 옵션으로 별도의 템플릿을 적용해 출력 형태를 바꿀 수 있다. $ jupyter nbconvert --to html sample.ipy.. 공감수 1 댓글수 0 2018. 9. 29.
  • Python: 임시파일(TemporaryFile)에 유니코드 캐릭터 쓰기 발생일: 2016.04.14 키워드: python Temporary file, 파이썬 임시파일, tempfile.TemporaryFile, unicode, utf8, 유니코드, Create temporary file with unicode encoding, unicode object, 유니코드 객체 문제: 파일 내의 특정 패턴의 단어를 다른 단어로 치환하려고 한다. 다음 순서대로 실행하려고 했다. 1. 원본 파일을 라인 단위로 읽어 특정 단어를 치환한 후에, 2. 치환한 라인을 순서대로 임시 파일에 쓴다. 3. 전체 파일을 다 읽었다면, 임시 파일의 내용을 원본 파일에 복사한다. 임시 파일은 tempfile 모듈을 이용해 생성했는데, 임시 파일을 쓰려고 하니 아래와 같은 에러가 발생했다. UnicodeE.. 공감수 0 댓글수 0 2017. 2. 27.
  • Python: 파일 검색 위치 초기화하기 발생일: 2016.04.19 키워드: file seek, python file search, 파이썬 파일 검색, file position, file pointer, 파일 포인터, 파일 커서, file cursor position 문제: 전체 파일에서 특정 단어를 찾는 코드를 작성했다. 첫 번째 검색할 땐 잘 찾아지는데, 두 번째부턴 검색되지 않는다. 왜일까? 해결책: 첫 번째 검색을 수행하면서 파일 포인터의 위치가 파일의 맨 끝으로 이동했기 때문이다. 두 번째 검색을 위해, 파일 포인터를 다시 파일의 시작 위치로 옮겨주는 방법으로 해결할 수 있다. 파일 포인터의 위치는 seek 메서드로 옮길 수 있다. file.seek(offset, from_what) - offset: 얼마나 옮길 것인지 - from_.. 공감수 0 댓글수 0 2017. 2. 27.
  • Python: -v 옵션을 받아서 로깅 레벨 설정하기 발생일: 2016.04.12 키워드: python, 파이썬, 커맨드라인 옵션, argument parser, argparse, command parser, 파이썬 인자 받기, 파이썬 명령행 인자 받기, verbose options, logging level, 로깅 레벨, 파이썬 로깅 문제: 파이썬 모듈을 실행할 때, -v 또는 --verbose 옵션을 인자로 전달해서 로깅 레벨을 설정하고 싶다. 해결책: 역시 스택오버플로우에 해답이 있다.ㅎㅎ 커맨드라인 옵션을 파싱하는 목적의 argparse 모듈이 있고, 아래처럼 사용하면 간단히 구현할 수 있다. import argparse import logging parser = argparse.ArgumentParser( description='A test scr.. 공감수 0 댓글수 0 2017. 2. 27.
  • Python: 정규식 구문 안에 변수 사용하기 발생일: 2016.04.14 키워드: 정규식, regular expression, regexp, re, re.escape, r literal string, raw string notation, r 표기법 문제: 정규식 구문에 변수에 할당한 값을 포함해 매칭하려고 한다. 해결책: 기본 문자열을 처리하듯이 구문 문자열에 변수를 더해 처리하면 된다. text = 'bar' re.match(r'foo' + text + r'bar', target) 논의: 파이썬의 정규식 구문은 주로 r'' 형태의 raw string notation 을 사용한다. r'' 표기법을 사용하면, 백슬래시를 일반 문자열처럼 처리할 수 있어 편리하다. 예를 들어, >>> r'\t' '\\t' >>> r'foo\nbar' 'foo\\nbar.. 공감수 0 댓글수 0 2016. 11. 25.
  • Python: 구글 스프레드시트 읽어오기 발생일: 2016.04.08 키워드: python, 파이썬, 구글 스프레드시트, Google Spreadsheet, Read google spreadsheet from python 문제: 파이썬에서 구글 스프레드시트에 인증해 시트를 읽어오고 싶다. 해결책: gspread 라는 라이브러리가 있고, 이 라이브러리를 사용하면 손쉽게 읽어올 수 있다. 구글 스프레드시트에 인증하는 방법에 대해서도 잘 설명해뒀다. http://gspread.readthedocs.io/en/latest/oauth2.html Credentials 파일을 생성한 후에, 읽어올 시트에서 client_email 에 공유 권한을 꼭 줘야 한다. 난 시트에서 공유하는 걸 빼먹어 한 동안 삽질했었다. 참고: - gspread: https://g.. 공감수 0 댓글수 0 2016. 11. 25.
  • flask: 여러 개의 파일 업로드하기 발생일: 2015.12.24 키워드: flask, file upload, 파일 업로드, 플라스크, upload multiple files in flask 문제: flask 에서 멀티 셀렉트가 가능한 파일 인풋으로 여러 개의 파일을 업로드하려고 한다. 해결책: 아래와 같이 multiple 옵션을 주고, flask.request.files 객체의 getlist() 를 사용하면 된다. @app.route("/upload", methods=["POST"]) def upload(): uploaded_files = flask.request.files.getlist("file") print uploaded_files return "" 참고: http://stackoverflow.com/questions/1181718.. 공감수 0 댓글수 0 2016. 11. 25.
  • Python: JSON 데이터에는 따옴표를 꼭 넣어야 한다 발생일: 2015.12.24 키워드: sqlite3, python, 파이썬, dictionary, json 문제: 파이썬에서 sqlite 3 모듈로 작업 중이었는데, 아래와 같은 오류가 난다. ProgrammingError: You did not supply a value for binding 1 아래와 같은 코드였다. def insert_data(cursor, stat_type, start_date, app_name, age, value): query = ''' INSERT INTO table (start_date, app_name, age, value) VALUES (:start_date, :app_name, :age, :value) ''' % stat_type cursor.execute(query,.. 공감수 0 댓글수 0 2016. 11. 25.
  • Python: 주에서 일자를 뽑아오기 발생일: 2015.12.23 키워드: python, 파이썬, strptime, 문제: 2015년 첫번째 주의 시작이 몇 일인지 가져오려고 한다. 해결책: datetime 모듈의 strptime() 함수를 사용하면 된다. > datetime.datetime.strptime('201501-1', '%Y%W-%w') datetime.datetime(2015, 1, 5, 0, 0) %w 는 어떤 요일을 한 주의 시작으로 볼 것인지를 판단하는 값이다. 0 = 일요일 1 = 월요일 위 코드는 월요일을 한 주의 시작으로 보았을 때, 2015년의 01번째 주에 해당하는 datetime 객체를 리턴한다. 리턴된 값을 보면, 2015년 1월 5일이 첫 주인 것을 알 수 있다. 마찬가지로, 아래 코드로 2015년의 50번째.. 공감수 0 댓글수 0 2016. 11. 25.
  • Python: 파이썬에서 엑셀 파일 읽어오기 발생일: 2015.12.21 키워드: openpyxl, xlrd, 파이썬 엑셀, python excel, read excel file using python, xlsx 문제: 파이썬으로 엑셀 파일을 읽어오려고 한다. 해결책: 내가 검색을 짧게 해서 그런지 모르겠지만, xls 형식의 파일과 xlsx 형식의 파일을 지원하는 라이브러리는 찾지 못했다. xls 파일을 읽어오려면 xlrd 라이브러리를, xlsx 파일을 읽어오려면 openpyl 라이브러리를 사용하면 된다. - xlrd: http://www.lexicon.net/sjmachin/xlrd.html - openpyxl: https://openpyxl.readthedocs.io 먼저, xls 파일은 xlrd 라이브러 사용해서 아래처럼 가져올 수 있다. w.. 공감수 0 댓글수 0 2016. 11. 25.
  • flask: HTTP 413 발생일: 2015.12.28 키워드: 413, flask 문제: 파일 업로드할 때 특정 개수 이상의 파일을 업로드하려고 했더니, 서버에서 413을 응답한다. 파일 용량이 너무 커서(too many bites) 발생하는 오류다. http://www.checkupdown.com/status/E413.html 해결책: 이 프로젝트에서는 웹서버로 flask를 쓰고 있는데, 아래처럼 업로드 허용 용량을 정의할 수 있다. from flask import Flask, Request app = Flask(__name__) app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 논의: 413 응답을 nginx 에서 내려줬다면, 아래 포스트를 참고하면 된다. http://ohgyun... 공감수 0 댓글수 0 2016. 6. 7.
  • Python: 'module' object is not callable 발생일: 2015.12.27 키워드: python, module, import 문제: 파이썬에서 아래와 같이 커스텀 에러 파일을 정의하고, [MyError.py] class MyError(Exception): ... 아래와 같이 다른 파일에서 모듈을 임포트했다. [example.py] import MyError MyError # 여기서 오류 발생 헌데 아래와 같은 오류가 발생한다. Python: 'module' object is not callable 왜일까? 해결책: 내가 임포트해온 것은 모듈이었고, 모듈 내의 클래스를 가져와야 했었다. 파일명과 클래스명이 동일해 더욱 헷갈렸던 거다. my_error.py 와 같이 파일명을 변경하고, 아래처럼 가져오는 방법으로 해결했다. import my_error m.. 공감수 5 댓글수 0 2016. 6. 7.
  • Python: virtualenv 로 가상환경 설치하기 발생일: 2015.12.26 키워드: python, 파이썬, virtualenv, 가상 환경 문제: 프로젝트에서 파이썬의 특정 버전을 갖는 가상 환경을 구성하려고 한다. 해결책: 파이썬 버전 매니저인 pyenv 와, 버전 별 환경을 구성할 수 있는 pyenv-virtualenv 플러그인으로 특정 파이썬 버전을 갖는 환경을 구성할 수 있다. 먼저 brew 로 설치하고, $ brew install pyenv $ brew install pyenv-virtualenv 프로젝트 디렉토리에서 아래 명령을 실행하면, .python-version 파일이 생성되면서 프로젝트의 파이썬 버전을 정의할 수 있다. $ pyenv local 2.7.10 $ pyenv virtualenv 2.7.10 venv 기타 명령 # 가상환.. 공감수 0 댓글수 0 2016. 6. 7.
  • Python: pyenv 설치 중 오류 발생일: 2015.12.26 키워드: 파이썬, python, pyenv 문제: pyenv 설치 중 아래와 같은 오류가 발생했다. ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib? 해결책: 아래 깃헙 이슈에서 여러가지 해결 방법을 제시하고 있다. https://github.com/yyuu/pyenv/issues/22 openssl 을 삭제하고 다시 시작하거나, configure 옵션을 설정해주는 라는데, 시도해봐도 해결이 안된다. 나한텐 homebrew 에 뭔가 문제가 있었나보다. 혹시나 해서 homebrew를 삭제하고 새로 설치했더니 해결됐다! 공감수 0 댓글수 0 2016. 6. 7.
  • Python: jinja 템플릿에서 HTML 이스케이프 무시하기 발생일: 2015.12.24 키워드: python, 파이썬, jinja 문제: jinja 템플릿에서 URL로 사용할 문자열인데, & 가 & 로 출력된다. HTML 이스케이프를 무시할 수 없을까? 해결책: autoescape 블럭으로 특정 부분은 이스케이프하지 않을 수 있다. {% autoescape true %} {{normal_string}} {% endautoescape %} {% autoescape false %} {{url_string}} {% endautoescape %} 아니면, |safe 필터를 다는 식으로 처리하면 된다. {{url_string|safe}} 참고: http://jinja.pocoo.org/docs/dev/templates/#autoescape-extension http://.. 공감수 0 댓글수 0 2016. 6. 7.
  • Python: 환경변수 읽어오기 발생일: 2015.12.30 키워드: python, 파이썬, 환경변수, env, environ 문제: 파이썬으로 환경변수를 읽어오려고 한다. 해결책: os 모듈의 environ 함수를 사용하면 된다. import os os.environ['FOO'] 이렇게 가져오면 읽어올 수 있지만, 환경변수 중에 FOO가 없으면 KeyError 가 발생한다. raise KeyError(key) KeyError: 'FOO' KeyError 를 처리하기 번거로운 상황이라면, os.getenv()를 사용하는 게 좋다. 값이 없을 경우엔 None을 리턴한다. import os os.getenv('FOO') os.getenv('NOT_EXIST') #-> None 공감수 0 댓글수 0 2016. 6. 6.
  • Python: sqlite3에서 조회한 목록의 컬럼 목록 가져오기 발생일: 2015.12.28 키워드: python, sqlite3, 컬럼 목록, 컬럼 이름, column name, get column list 문제: slite3 에서 조회한 목록의 컬럼 목록을 가져오려고 한다. 해결책: cursor 인스턴스의 description 값을 활용하면 된다. 람다로 가져오거나, names = list(map(lambda x: x[0], cursor.description)) list comprehension으로도가져올수있다. names = [description[0] for description in cursor.description] 참고: http://stackoverflow.com/questions/7831371/is-there-a-way-to-get-a-list-of-.. 공감수 0 댓글수 0 2016. 6. 6.
  • Python: 컬렉션 내부에서 가장 크거나 작은 N개의 아이템 찾기 발생일: 2015.10.29 키워드: heapq, heapq.nlargest, heapq.nsmallest 문제: 컬렉션 내부에서 가장 크거나 작은 N개의 아이템을 찾으려고 한다. 해결책: import heapq nums = [1, 8, 3, -5, 4, 99, -4, 0] # heapq 모듈에 이 용도에 적합한 nlargest()와 nsmallest() 함수가 있다. # - heapq.nlargest(n, iterable, key=None) # - heapq.nsmallest(n, iterable, key=None) print(heapq.nlargest(3, nums)) #-> [99, 8, 4] print(heapq.nsmallest(3, nums)) #-> [-5, -4, 0] # 좀 더 복잡한 구.. 공감수 1 댓글수 0 2015. 10. 29.
  • Python: collections.deque 로 순환이나 프로세싱 중 마지막 아이템 처리하기 발생일: 2015.10.22 키워드: collections.deque, deque 문제: 순환이나 프로세싱 중 마지막으로 발견한 N개의 아이템 유지하고 싶다. 해결책: # 이런 목적으론 collection.deque 가 가장 적합한다. # deque는 큐 구조체가 필요할 때 사용할 수 있다. # deque(maxlen=N)으로 고정 크기 큐를 생성할 수 있으며, # 큐가 찬 상태에서 새 아이템을 넣으면 첫 아이템이 자동으로 삭제된다. from collections import deque q = deque(maxlen=3) q.append(1) q.append(2) q.append(3) print(q) #-> deque([1, 2, 3], maxlen=3) q.append(4) print(q) #-> de.. 공감수 0 댓글수 0 2015. 10. 22.
  • Python: 언패킹(unpacking) : 시퀀스를 개별 아이템으로 나누기 발생일: 2015.10.22 키워드: splat operator, 스플랫, 언패킹, unpacking, 튜플 나누기, 배열 나누기, 문자열 나누기 문제: N개의 요소를 가진 튜플이나 시퀀스를 N개나 그 이하의 요소로 나누려고 한다. 해결책: # 아래와 같이 좌측에 여러 개의 변수를 선언하는 방법으로 언패킹할 수 있다. p = (4, 5) x, y = p print(x) #-> 4 print(y) #-> 5 # 언패킹은 튜플이나 리스트 뿐 아니라 순환 가능한 모든 객체에 적용할 수 있다. # 여기엔 문자열, 파일, 이터레이터, 제너레이터가 포함된다. s = 'Hello' a, b, c, d, e = s print(a) #-> 'H' print(b) #-> 'e' print(c) #-> 'l' print(d.. 공감수 0 댓글수 0 2015. 10. 22.
  • Python: 엘 캐피탄에서 파이썬 버전 매니저 pyenv 로 새 버전 설치하기 발생일: 2015.10.21 키워드: python, pyenv, python version manager, 파이썬 버전 매니저, 엘 캐피탄, el capitan 문제: OS X 엘 캐피탄에서 파이썬 버전 매니저로 새 버전을 설치하려고 한다. 해결책: pyenv - https://github.com/yyuu/pyenv - rbenv 를 포크해서 만든 파이썬 버전 매니저 brew 로 pyenv 를 설치하고, 새 버전의 파이썬(여기서는 3.5.0)을 설치하면 된다. $ brew updqte $ brew install pyenv $ pyenv install 3.5.0 잘 풀리지 않는다면, - 엘 캐피탄에서 brew 를 설치할 때 권한 이슈 - 엘 캐피탄에서 SIP (System Integrity Protecti.. 공감수 0 댓글수 0 2015. 10. 21.
  • 파이썬 문법 5분 정리 발생일: 2013.01.09 문제: 몇 일 동안 익혔던 파이썬 문법을 슬라이드로 정리했다. 이것 저것 동시에 하다보니, 자꾸 헷갈리고 까먹어서 Cheat Sheet로 볼 요량으로. ㅎㅎ처음엔 텍스트로 정리할까 했는데,슬라이드로 만들어서 바로바로 슉슉 넘겨보면 더 좋을 것 같아서 작성해봤다. 나중에 까묵했을 때 훑어보고, 괜찮으면 다음에도 이런 식으로 정리해봐야겠다. 해결책: 공감수 0 댓글수 0 2013. 1. 9.
  • 2진수와 16진수 표현하기 발생일: 2013.01.09 문제: 지난 노트들을 정리하다가 오래 전에 기록해뒀던 2/8/16 진수 표현에 대한 메모를 발견했다. 진수 변환이나 비트 연산은 참 볼 때마다 새롭다. ㅎㅎ 굳이 이 기분을 표현해보자면,..꼭 천 단위로 숫자를 끊어 읽는 것 같다.아주 익숙하지만, 얼마인지 알려면 맨 끝에서부터 다시 세어봐야 하는 것 같달까.. -_-a(예: 142,324,242,000) 여튼, 얼마 전 파이썬을 익히면서 비트 연산 활용법에 대한 부분도 공부한 적이 있어,예전 노트와 묶어 메모해두려고 한다. 해결책: 기수(base)B진법: 기수를 B로 정수를 표현하는 방법 (예: 10진법, 16진법) 10진수: Decimal (23)2진수: Binary (10111)8진수: Octal (0으로 시작한다. 02.. 공감수 0 댓글수 0 2013. 1. 9.
  • File open modes 발생일: 2012.10.31 문제: 지난 주부터 파이썬 스터디를 하고 있는데,오늘은 아주 간단한 파일 처리 코드를 익혔다. 파일을 열 때 파일 모드를 파라미터로 넣는데,파일 모드는 정말 봐도 까먹고 봐도 까먹고 한다. 조금 헷갈리는 것도 있어서, 이번에 정확하게 정리해두려고 한다. 해결책: 파이썬의 내장 opne() 함수의 파일 오픈 모드는, C의 fopen()과 정확하게 일치한다.파일 모드에 관한 정의는 BSD fopen 매뉴얼 페이지에 정확하게 설명되어 있다. 각 파일 모드가 어떤 작업을 하는지, 파일을 열었을 때 커서가 어디에 있는지정확하게 알아두자. ``r'' Open text file for reading. The stream is positioned at the beginning of the .. 공감수 0 댓글수 0 2012. 10. 31.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.