발생일: 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/..
발생일: 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') # 여러..
발생일: 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..
발생일: 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 패키지는 업데이트되지 않는다. 어떻게 해야할까? ..
발생일: 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..
발생일: 2016.04.14 키워드: python Temporary file, 파이썬 임시파일, tempfile.TemporaryFile, unicode, utf8, 유니코드, Create temporary file with unicode encoding, unicode object, 유니코드 객체 문제: 파일 내의 특정 패턴의 단어를 다른 단어로 치환하려고 한다. 다음 순서대로 실행하려고 했다. 1. 원본 파일을 라인 단위로 읽어 특정 단어를 치환한 후에, 2. 치환한 라인을 순서대로 임시 파일에 쓴다. 3. 전체 파일을 다 읽었다면, 임시 파일의 내용을 원본 파일에 복사한다. 임시 파일은 tempfile 모듈을 이용해 생성했는데, 임시 파일을 쓰려고 하니 아래와 같은 에러가 발생했다. UnicodeE..
발생일: 2016.04.19 키워드: file seek, python file search, 파이썬 파일 검색, file position, file pointer, 파일 포인터, 파일 커서, file cursor position 문제: 전체 파일에서 특정 단어를 찾는 코드를 작성했다. 첫 번째 검색할 땐 잘 찾아지는데, 두 번째부턴 검색되지 않는다. 왜일까? 해결책: 첫 번째 검색을 수행하면서 파일 포인터의 위치가 파일의 맨 끝으로 이동했기 때문이다. 두 번째 검색을 위해, 파일 포인터를 다시 파일의 시작 위치로 옮겨주는 방법으로 해결할 수 있다. 파일 포인터의 위치는 seek 메서드로 옮길 수 있다. file.seek(offset, from_what) - offset: 얼마나 옮길 것인지 - from_..
발생일: 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..
발생일: 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..
발생일: 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..