본문 바로가기

Python64

[python] PIP에 패키지 등록하는 방법 파이썬의 패키지 배포는 pypi 사이트를 이용합니다. 개인적으로 만든 패키지를 pypi 사이트에 배포하는 방법을 알아보겠습니다. 준비사항-PIP 패키지 설치 pypi에 패키지를 배포하기 위해서는 다음 3개의 패키지를 설치하는 것이 좋습니다. pip install wheel # 빌드 툴 pip install setuptools # 패키징 툴 pip install twine # 패키지 업로드 툴 각 패키지의 상세한 내용은 다음 내용을 참고 바랍니다. wheel 파이썬 빌드& 패키징 포맷입니다. 기존 egg 포맷을 대체하는 포맷입니다. wheel vs egg 파이썬 공식 문서[바로가기] setuptools 파이썬의 기본 라이브러리인 distutils를 개선한 패키지 개발 라이브러리 setup.py 파일에 관련.. 2018. 10. 16.
[python] 데코레이터를 이용하여 파라미터의 값을 제한 하는 예제 파이썬에서 파라미터로 전달받는 데이터의 값을 제한하기 위해서 데코레이터를 이용하는 방법은 다음과 같다. 파이썬3면 Enum을 이용하면 좀더 깔끔하게 처리할 수 있을 것 같다. 인스펙트를 이용하여 추가로 처리하는 예제는 다음과 같다. #!/usr/bin/env python # -*- coding: utf-8 -*- import inspect values = [ "a", "b", "c" ] def check_param_values(param_name, check_list): def wrapper(func): param_index = inspect.getargspec(func).args.index(param_name) def decorator(*args, **kwargs): if args[param_index.. 2018. 9. 7.
[python] 파이썬의 데코레이터(Decorator) 간단 예제 파이썬의 데코레이터는 함수를 실행하기 전과 후에 공통적으로 해야할 작업이 있을 경우 사용하면 도움이 된다. @을 이용하여 함수위에 선언해주면되고, 데코레이터는 함수, 클래스를 이용하여 선언할 수 있다. 다수의 데코레이터를 적용할 수도 있다. 간단한 예제는 다음과 같다. 실행결과는 다음과 같다. print_hello1시작 hello1 print_hello1종료 ------------------------------- 2018-07-26 15:18:16.128121 print_hello2시작 hello2 print_hello2종료 2018-07-26 15:18:16.128121 None ------------------------------- 2018-07-26 15:18:16.128121 hello3 20.. 2018. 9. 7.
[python] 셔뱅(Shebang)을 이용하여 파이썬 실행 버전 지정하기 여러개의 파이썬 모듈이 설치된 시스템에서 파이썬을 실행하는 버전을 지정해야 하는 경우에 선택할 수 있는 방법은 두가지가 있다. 하나는 실행시점에 파이썬의 버전을 명시하는 방법이다. > python2.7 run_script.py> python3.7 run_script.py 다른 방법은 스크립트의 셔뱅을 이용하는 방법이다. 유닉스 계열에서 작성한 스크립트의 셔뱅에 파이썬의 버전을 지정하면 실행 시점에 자동으로 선택해 준다. #!/usr/bin/env python2.7 #!/usr/bin/env python3.6 > ./run_script.py 셔뱅에 파이썬 버전을 지정하면 다른 서버에서도 동일한 환경으로 동작한다. https://en.wikipedia.org/wiki/Shebang_%28Unix%29#Por.. 2018. 8. 8.
[python] 반복적인 입력에는 input() 대신 sys.stdin.readline 로 변경 파이썬에서 데이터를 입력받을 때 input()을 이용한다. input()을 이용하면 프롬프트를 이용한 입력을 받을 수 있고, 형변환이 되는 이점이 있다. 하지만 대량의 데이터를 반복적으로 입력받을 때 input()을 이용하지 않고, sys.stdin.readline() 을 이용하면 성능이 향상된다. 백준 1931 문제를 같은 코드로 입력 함수만 다르게 사용한 결과 아래와 같이 10배의 속도 향상(3928MS -> 336MS)을 얻을 수 있었다. 8954131h1931맞았습니다!!50344 KB336 MSPython 3 / 수정491 B41분 전8953912h1931맞았습니다!!50344 KB3928 MSPython 3 / 수정508 B1시간 전자바에서 Scanner를 이용한 입력보다 BufferedRea.. 2018. 6. 18.
[python] yyyymmdd 일자별 문자열 리스트 생성 방법 일자별로 생성된 데이터의 처리를 위해서 yyyymmdd 형태의 문자열 또는 datetime 객체를 생성하기 위한 코드 조각이다. 3개의 형식으로 1. 시작일자, 종료일자를 입력 받아서 해당 일자 사이의 yyyymmdd 리스트 반환2. 시작일자, 기간을 받아서 시작일자 - 기간의 일자 반환3. 시작일자, 기간을 받아서 시작일자 + 기간의 일자 반환 처리결과 : ['20180501', '20180502', '20180503', '20180504', '20180505', '20180506', '20180507', '20180508', '20180509', '20180510'] 2018. 5. 15.
[python/코드조각] 상속과 부모의 생성자 호출, 메소드 재정의 파이썬의 클래스는 상속이 가능하다. 상속하여 부모 클래스의 메소드를 재정의하는 것도 가능하다. 상속하는 방법과 부모 클래스의 생성자 호출은 다음과 같다. 추가로 파이썬 3.1 부터는 다음의 방법도 가능하다고 한다. 2018. 5. 10.
[python/코드조각] 파이썬 클래스의 __getattr__, __setattr__ 속성 활용 파이썬의 클래스는 애트리뷰트를 저장할 수 있는 특수 함수 __dict__ 를 가지고 있다. 이 속성에 클래스의 자체 애트리뷰트를 저장할 수 있다. 그리고 특수 함수 __getattr__, __setattr__ 를 이용하여 해당 값을 가지고 온다. 사용자가 클래스를 생성할 때 이 값들을 오버라이딩하여 재정의 할 수도 있다. https://docs.python.org/3/reference/datamodel.html https://ziwon.github.io/posts/python_magic_methods/ 2018. 5. 9.
[python/코드조각] open() 을 이용하여 파일 읽기 파이썬의 open() 함수와 with 구문을 이용하여 파일을 효율적으로 읽는 방법은 다음과 같다. 2018. 5. 9.
[python] multiprocessing 을 이용한 스레드 처리 파이썬은 GIL때문에 멀티 스레드를 처리할 수 없다. 그래서 multiprocessing 모듈을 이용하여 동시 처리를 가능하게 한다. https://docs.python.org/3.5/library/multiprocessing.htmlhttps://pymotw.com/2/multiprocessing/basics.html 2017. 12. 7.
[python] 문자열을 효율적으로 concat 하는 방법 파이썬에서 문자열을 효율적으로 concat 하는 방법을 찾아보다가 좋은 사이트를 발견해서 스크랩 해본다. 원문에서 방법 4, 5, 6을 추천하고 있다. 방법 6이 가장 빠르기 때문에 많이 사용하고,방법 4는 처리시 문자열을 변환하려고 할 때 유연하게 적용이 가능하다. 방법 5는 가상 파일을 이용하기 때문에 메모리 사용량에 있어서 가장 효율적이다. 방법 4, 6 의 경우 리스트릴 이용하기 때문에 문자열이 많아지면 메모리 사용량이 늘어날 수 있다. https://waymoot.org/home/python_string/http://blog.leekchan.com/post/19062594439/python%EC%97%90%EC%84%9C-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-stri.. 2017. 2. 22.
[python] range, xrange 함수 사용법 파이썬에서 숫자로 일정구간을 반복하기 위해서, range()와 xrange() 함수를 제공한다. 동작에는 차이가 없지만, 세부적으로 range()는 리스트 객체를 반환하고, xrange()는 xrange 객체를 반환한다. range()는 리스트 객체를 생성하여 반환하기 때문에 숫자가 커질수록 메모리 사용량이 많다.xrange()가 반환하는 xrange 타입은 제네레이터이다. 따라서 필요할 때 숫자를 생성하기 때문에 메모리 사용량은 일정하다. * 모바일 환경이나 메모리가 제한적인 상황에서는 xrange()를 사용하고, 만약 배열을 여러번 순환해야 한다면 range()를 사용하는 것이 더 좋을 것이다. 사용방법은 다음과 같다. #!/bin/python# -*- coding:utf-8 -*- def range.. 2017. 2. 22.
[Hive] transform 으로 파이썬을 이용할 때 exception 출력하기 SELECT TRANSFORM(id, name) USING 'transform.py' as (id, name) FROM tbl; 이렇게 transform.py 를 구성할 때 sys.stderr 을 이용하여 오류를 출력한다. except Exception as err: print >> sys.stderr, err # print to stderr (python 2 syntax) sys.exit(1) 2017. 1. 23.
[python][error] 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UX 오류 수정 'unicodeescape' codec can't decode bytes in position 2-3: truncated \U 파이썬에서 파일을 읽기 위하여 파일의 경로를 지정하는 도중에 경로상에 \u, \U 가 있으면 위와 같은 오류가 발생한다. 파이썬은 특수 문자를 \ 로 시작하여 인식하기 때문에 위와 같은 오류가 발생한다. 특수 문자 목록은 다음과 같다. * \u, \U는 유니코드를 나타내는 특수 문자이다. Escape SequenceMeaningNotes\newlineIgnored \\Backslash (\) \'Single quote (') \"Double quote (") \aASCII Bell (BEL) \bASCII Backspace (BS) \fASCII Formfeed (FF) \nAS.. 2017. 1. 23.
[python][error] PermissionError: [Errno 13] Permission denied: ... PermissionError: [Errno 13] Permission denied: 파이썬에서 파일을 오픈하려고 할때 위와 같은 오류가 발생할 때가 있다. 이오류는 다음의 경우에 발생한다. - 파일을 오픈할 수 있는 권한이 없을때.- 파일이 아니라 폴더를 지정했을 때.- 파일이 없을때 경험상 폴더를 지정하는 경우가 많았던것 같다. 경로를 확인해보자. 2017. 1. 23.
[python] yield 커맨드(iterable, generator) terable 순차적으로 접근이 가능한 리스트 등 Generator 메모리에 값을 저장하는 것이 아니라, for 문이 처리하는 시점에 값을 생성함. 한번 만 사용이 가능함 Yield 마치 return 문 처럼 동작함 호출되는 시점에 동작하는 것이 아니라, for 문이 처리하는 시점에 값을 생성함 http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do 2016. 12. 16.
[oozie] python을 이용하여 우지 WebService API 호출하기 우지는 REST API로 잡목록 확인, 잡수행을 위한 웹서비스 API를 제공한다. 웹서비스 https://oozie.apache.org/docs/4.0.0/WebServicesAPI.html HTTP를 이용하여 우지 콘솔 명령을 수행할 수 있으므로이를 이용하여 잡 모니터링, 수행이 가능하다. - 잡 목록 확인http://주소/oozie/v1/jobs?jobtype=coord&len=10000&filter=status=RUNNING - 잡 정보 확인http://주소/oozie/v1/job/[워크플로우|코디에티어ID]?show=info&len=10000 기본적인 API는 위와 같다. * 우지에서 제공하는 DOC에서 정보 확인이 가능하고, 조건등을 자세하게 확인하기 어렵다면 우지에서 기본적으로 제공하는 웹콘솔.. 2016. 10. 10.
[hadoop][python][linux] sudo: no tty present and no askpass program specified 오류 처리하기 하둡을 이용하여 파이썬 프로그램을 실행하던중로컬에서는 실행이 되는데, MR을 이용하여 실행하면 다음과 같은 오류가 발생하는 경우가 있다. os.system("sudo apt-get -y install python-pip") sudo: no tty present and no askpass program specified 로컬에서 바로 실행을 하면 sudo 명령을 사용할 수 있는데,mr 을이용하면 사용이 불가능하다. 이는 mr을 이용하여 실행하면, 프로그램을 실행하는 노드로 ssh를 이용하여 접속을 하고해당 프로그램을 실행시키는데 이때 mr은 yarn 계정으로 접근을 하고 이 yarn 계정은 sudo 실행 권한이 없기 때문이다. 이 문제를 해결하기 위해서는 하둡시스템의 모든 노드의 yarn 계정의 권한에 s.. 2016. 10. 5.
[python] 처리 시간의 평균 구하기 datetime을 이용하여 처리시간의 평균을 구하는 방밥은 다음과 같다. 처리시간을 초로 변환하여 모두 더하여 나누고, 이것을 다시 시간으로 변환하면 된다. 문자열을 datetime 객체로 변화할 때는 striptime() 메소드를 이용하면 된다. 2016. 10. 4.
[python] HTTP request 를 이용하여 json 가져오기 python 에서 json을 가져오는 방법은 simplejson 모듈을 이용하면 된다. https://pypi.python.org/pypi/simplejson 2016. 10. 4.
[requests] requests 모듈을 이용한 http get, post 처리 python 에서 http 를 처리하는 방벙에는 기본적으로 제공하는 urllib, urllib2 모듈을 이용하는 방법도 있지만 request 모듈을 이용하면 좀더 편리하게 처리할 수 있다. pip install requests pip를 이용하여 설치후 사용한다. #! -*- coding:utf-8 -*- import requests r = requests.get('http://comic.naver.com/webtoon/detail.nhn?titleId=22027&no=1&weekday=wed') print(r.text) print(r.headers) print(r.encoding) print(r.cookies) print('-------------------') # header 를 이용 headers =.. 2016. 3. 28.
[os] 디렉토리의 특정파일의 파일명 변경하기 디렉토리에 지정된 특정 파일의 파일명을 일괄로 변경해야 하는 경우 다음의 소스를 활용하면 된다. 아래는 현재 디렉토리의 zip 파일을 가져와서 파일명의 공백과 꺽쇠를 없애는 소스코드이다. def rename_file(): for filename in os.listdir("."): if filename.endswith("zip"): os.rename(filename, filename.replace(" ", "_").replace("", "")) 2016. 3. 23.
[urllib / http]http로 웹에서 파일 다운로드 하기 웹상에서 파일을 다운로드 하기 위해서는 urllib 모듈을 이용하면 된다. 다음과 같이 2가지 방법이 있다. * urlretrieve 를 이용하는 것이 더 편할듯 import urllib urllib.urlretrieve(file_url, file_name) import urllib resource = urllib.urlopen("http://www.digimouth.com/news/media/2011/09/google-logo.jpg") output = open("file01.jpg","wb") output.write(resource.read()) output.close() http://stackoverflow.com/questions/8286352/how-to-save-an-image-locally-.. 2016. 3. 5.
[python][xlswriter] xlsxwriter 를 이용하여 엑셀 문서 생성 파이썬에서 엑셀 문서를 생성하기 위해서는 xlsxwriter를 이용한다. * 수정은 안됨 바로가기 -> http://xlsxwriter.readthedocs.org/contents.htmlworkbook 옵션 -> http://xlsxwriter.readthedocs.org/workbook.html Workbook 생성시 사용할 수 있는 옵션 중 다음은 중요하다. constant_memory - xlsxwriter는 파일의 내용을 다음 프로세스에 자유롭게 사용하기 위해 메모리에 저장한다. - 파일 사이즈가 커지면 사용하는 메모리양도 점점 커지기 때문에 메모리 오류가 발생할 수 있다. - 이를 위해 파일 사이즈가 크다면 해당 옵션을 True 로 설정하여 메모리를 고정한다. tmpdir- xlsxwriter.. 2016. 1. 20.
python2의 map, filter, reduce 함수 [python2의 map, filter, reduce 함수] map 함수를 이용하여 리스트의 값들에 동일한 로직을 적용하여 데이터를 변환하고, filter 함수를 이용하여 리스트의 값들을 필터링,reduce 함수를 이용하여 리스트의 값을 하나로 모은다. temp_list = range(0, 10) # python map, filter, reduce 함수 # map 함수는 iterable 에 동일한 함수를 적용한다. # map(function, iterable, ...) print map(lambda x: x + 1, temp_list) # filter 함수는 iterable 에서 조건에 맞는 함수를 제거한다. print filter(lambda x: x > 3, temp_list) # reduce 함수는.. 2015. 12. 28.
[Python] ==과 is 의 차이 == 는 값을 비교, is는 레퍼런스(참조) 비교 >>> 1000 == 10 ** 3 True >>> 1000 is 10 ** 3 False 2015. 8. 5.
[Python] http 리퀘스트 처리하기 HTTP 리퀘스트 처리하기 파이선에서 http 리퀘스트를 처리하는 방법에는 urllib, urllib2 모듈을 이용하는 방법이 있다. urllib 모듈은 http, ftp, file 등의 처리도 동시에 가능하다. urllib2 모듈은 리퀘스트 시점에 헤더 정보를 입력하는 것이 가능하다. requests 모듈은 파이선의 기본 모듈이 아니라 추가적으로 설치하여 사용하는 모듈이다. 예제 #!/usr/bin/python # -*- coding: utf-8 -*- import urllib import urllib2 import requests # urllib - Open arbitrary resources by URL # urllib2 - extensible library for opening URLs -> 파이.. 2015. 6. 23.
[python] time, datetime, timedelta time, datetime, timedelta datetime – basic date and time types time : time access and conversions 파이선에서 날짜 관련 객체는 datetime, time 가 있다. 둘다 날짜를 처리하는 객체이지만 사용 가능한 메소드들을 확인해 보면 time은 지역화 설정 등의 메소드들을 제공하고, datetime 객체는 날짜, 시간을 조작하는 기능을 제공한다. 그리고 날짜간의 연산을 위해 timedelta 객체를 제공한다. 현재부터 하루전, 한시간후 등의 시간을 구하거나, 시작시간과 종료시간 사이에 걸린 시간 등을 구하는데 사용한다. 예제코드 #!/usr/bin/python # -*- coding: utf-8 -*- import time fro.. 2015. 6. 19.
[python] 문자열 치환 방법 파이선의 문자열 치환법 파이선의 문자열 치환은 format() 메소드를 이용하거나, % 를 이용하여 딕셔너리나 튜플을 이용하여 치환하는 방법이 있다. #!/usr/bin/python # -*- coding: utf-8 -*- # format 이용(3.x 버전에서는 사용 안됨) sentence1 = 'I am a {}' print sentence1.format("boy") # format 및 번호 이용 sentence2 = 'I am a {0}' print sentence2.format("boy") # format 에 리스트와 dict 를 이용한 방법 sentence3 = "I am a {0} and {x}" print sentence3.format("boy", x="girl") # % 와 dict 를 이.. 2015. 6. 12.
[python] subprocess 모듈을 이용한 명령어 실행 파이선으로 외부 명령어 실행 파이선으로 외부 명령어를 실행하는 방법은 subprocess 모듈을 사용한다. subprocess 모듈은 2.4 버전부터 추가 되었으며 기존에 사용하던 다른 모듈을 대체한다. os.system os.spawn* os.popen* popen2.* command.* subprocess.Popen() subprocess 의 Popen() 메소드를 이용하여 로컬 프로그램, 명령어를 사용한다. Popen()의 shell 파라미터는 기본이 False이고, 명령어를 문자열로 쉘에 전달하려면 True로 설정해야 한다. #!/usr/bin/python # -*- coding: utf-8 -*- import subprocess import shlex # 문자열 명령어 실행 def subproc.. 2015. 6. 11.